Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Una consulta un tanto complicada...

Estas en el tema de Una consulta un tanto complicada... en el foro de Bases de Datos General en Foros del Web. En mysql: Tenemos la tabla_A con los campos 'nick' y 'edad' y la tabla_B con los campos 'nick' y 'ciudad' Quiero seleccionar todos los registros ...
  #1 (permalink)  
Antiguo 12/11/2005, 11:51
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
Una consulta un tanto complicada...

En mysql:

Tenemos la tabla_A con los campos 'nick' y 'edad'

y la tabla_B con los campos 'nick' y 'ciudad'

Quiero seleccionar todos los registros de la tabla_A cuyo nick no aparezca en en el campo 'nick' de la tabla_B. No sé si lo he explicado bien, lo que quiero es ver que nicks de la tabla_A no aparecen en la tabla_B.

Gracias anticipadas.

Un saludo.
__________________
dominioslibres.info
  #2 (permalink)  
Antiguo 14/11/2005, 02:22
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
select * from A where nick not in (select nick from B)
  #3 (permalink)  
Antiguo 14/11/2005, 08:56
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
Gracias, pero me da error de sintaxis en 'select nick from B'.
__________________
dominioslibres.info
  #4 (permalink)  
Antiguo 14/11/2005, 09:18
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
Cita:
Iniciado por talle
Gracias, pero me da error de sintaxis en 'select nick from B'.

Que version de MySql tienes instalada?
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #5 (permalink)  
Antiguo 14/11/2005, 09:25
 
Fecha de Ingreso: marzo-2004
Mensajes: 34
Antigüedad: 20 años, 1 mes
Puntos: 0
La sintaxis que te han propuesto funciona correctamente en Access pero no creo que para MySQL

Si es para MySQL usa esta manera:

SELECT *
FROM A
WHERE nick <> (SELECT nick FROM B)

Un saludo
  #6 (permalink)  
Antiguo 14/11/2005, 09:30
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
Tampoco funciona. Persiste el error de sintaxis en 'SELECT nick FROM B'.
__________________
dominioslibres.info
  #7 (permalink)  
Antiguo 14/11/2005, 09:57
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Creo que te equivocas ghismo, en Mysql el signo <> compara unicamente dos valores por lo que la consulta que pones dará error porque la subconsulta devuelve más de una fila. La sintaxis que puse es totalmente correcta para MySQL 4.x en adelante.
  #8 (permalink)  
Antiguo 14/11/2005, 10:00
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
Perdonad por mi instencia, pero el mismo error de sintaxis aparece de las dos maneras.
__________________
dominioslibres.info
  #9 (permalink)  
Antiguo 14/11/2005, 10:45
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Pero que versión tienes de mysql???
  #10 (permalink)  
Antiguo 14/11/2005, 10:55
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
MySQL 4.0.24
__________________
dominioslibres.info
  #11 (permalink)  
Antiguo 14/11/2005, 11:08
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Perdón por la info erronea anterior:

Cita:
Starting with MySQL 4.1, all subquery forms and operations that the SQL standard requires are supported, as well as a few features that are MySQL-specific.
mysql.com

Bien con tu versión puedes intentar mirar esto:

http://dev.mysql.com/doc/refman/4.1/...imization.html
  #12 (permalink)  
Antiguo 14/11/2005, 11:27
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
Te agradezco sinceramente el intento, pero ahí ya me pierdo. Entre el inglés y lo poco que sé del tema...

Gracias de todos modos.
__________________
dominioslibres.info
  #13 (permalink)  
Antiguo 14/11/2005, 14:00
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
prueba con esto:
Código:
select a.*
from tabla_a a
left join tabla_b b
  on b.nick = a.nick
where b.nick is null
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #14 (permalink)  
Antiguo 14/11/2005, 14:32
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
Perfecto, funciona bien. Gracias haron.

Si no fuera ya mucho pedir ¿que sentencia podría usar para borrar directamente estos registros?. He probado a poner lo mismo pero sustituyendo el SELECT por DELETE, pero me da el siguiente error:
Cita:
Not unique table/alias: 'a'
__________________
dominioslibres.info
  #15 (permalink)  
Antiguo 15/11/2005, 02:38
 
Fecha de Ingreso: marzo-2004
Mensajes: 34
Antigüedad: 20 años, 1 mes
Puntos: 0
Cita:
Iniciado por Jose_minglein2
Creo que te equivocas ghismo, en Mysql el signo <> compara unicamente dos valores por lo que la consulta que pones dará error porque la subconsulta devuelve más de una fila. La sintaxis que puse es totalmente correcta para MySQL 4.x en adelante.
Tienes toda la razón. Perdón por la metida de pata.

Un saludo
  #16 (permalink)  
Antiguo 15/11/2005, 06:48
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Cita:
Si no fuera ya mucho pedir ¿que sentencia podría usar para borrar directamente estos registros?. He probado a poner lo mismo pero sustituyendo el SELECT por DELETE, pero me da el siguiente error:
Creo que con tu versión no puedes meter select ni nada de eso en deletes, update....Deberías hacerlo por código, primero obteniendo los valores y luego borrandolos.

Un saludo.
  #17 (permalink)  
Antiguo 15/11/2005, 07:15
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 20 años, 10 meses
Puntos: 1
Ya he conseguido las soluciones. Gracias por todo y perdonad las molestias.

Son las siguientes:
Código:
// select

SELECT * FROM table_a LEFT JOIN table_b ON ( table_a.nick = table_b.nick ) WHERE table_b.nick IS NULL;

// delete

DELETE FROM table_a USING table_a LEFT JOIN table_b ON ( table_a.nick = table_b.nick ) WHERE table_b.nick IS NULL;
Un saludo.
__________________
dominioslibres.info
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:45.