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

MySQL : mostrar registros no relacionados

Estas en el tema de MySQL : mostrar registros no relacionados en el foro de Bases de Datos General en Foros del Web. hola foro a ver si me dan una manito con el siguiente problema, tengo las siguientes tablas adv_list : id, direccion, id_pos adv_zone : id_zone, ...
  #1 (permalink)  
Antiguo 26/05/2005, 14:06
 
Fecha de Ingreso: junio-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 101
Antigüedad: 20 años, 10 meses
Puntos: 1
MySQL : mostrar registros no relacionados

hola foro

a ver si me dan una manito con el siguiente problema,
tengo las siguientes tablas

adv_list:
id,
direccion,
id_pos


adv_zone:
id_zone,
name


ambas tablas se relacionan con adv_list.id_pos = adv_zone.id_zone

necesito obtener todos los registros de adv_zone que aun no estan relacionados en adv_list

con la siguiente consulta obtengo los contrario de la que necesito

SELECT adv_zone.id_zone, adv_zone.name
FROM adv_list, adv_zone
WHERE adv_list.id_pos = adv_zone.id_zone ';

he intentado invertir la consulta usando != o DISTINCT pero solo me da registros dupicados

Gracias
__________________
@cesars
indexante.com
  #2 (permalink)  
Antiguo 26/05/2005, 14:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Algo como:

SELECT * FROM adv_zone WHERE adv_zone.id_pos NOT IN (SELECT adv_list.id_pos FROM adv_list)
  #3 (permalink)  
Antiguo 26/05/2005, 16:24
 
Fecha de Ingreso: junio-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 101
Antigüedad: 20 años, 10 meses
Puntos: 1
Esa sentencia resolvio el problema, no conocia esa forma de hacerlo :)

Gracias
__________________
@cesars
indexante.com
  #4 (permalink)  
Antiguo 26/05/2005, 16:57
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Hum...

Me parece mas eficiente esta forma:

SELECT * from avd_zone
FROM adv_list al
INNER JOIN adv_zone az on al.id_pos = az.id_zone;

Creo que debe de funcionar, y el INNER JOIN sera mas eficiente que hacer una consulta para cada registro.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #5 (permalink)  
Antiguo 26/05/2005, 17:08
 
Fecha de Ingreso: junio-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 101
Antigüedad: 20 años, 10 meses
Puntos: 1
SELECT * from avd_zone
FROM adv_list al
INNER JOIN adv_zone az on al.id_pos = az.id_zone;

no entiendo, menos funciona :(
__________________
@cesars
indexante.com
  #6 (permalink)  
Antiguo 26/05/2005, 17:13
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Hummm...

Bien, te recomiendo usar un Join, el Join sirve para unir tablas y hacer lo que estas buscando, pero tienes razon, INNER te trae los que si estan relacionados, no los que NO estan, por eso no funciono.

Humm, no se con cual tipo de JOIN hacer lo que quieres, bueno, mientras puedes usar el otro metodo que te recomendaron que es valido.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #7 (permalink)  
Antiguo 26/05/2005, 17:22
 
Fecha de Ingreso: junio-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 101
Antigüedad: 20 años, 10 meses
Puntos: 1
Gracias de todas maneras por responder
__________________
@cesars
indexante.com
  #8 (permalink)  
Antiguo 27/05/2005, 01:15
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
No hay ningún tipo de join específico que te obtenga lo que quieres, pero puedes conseguirlo de la siguiente manera:
Código:
SELECT adv_zone.id_zone, adv_zone.name, count(al.id_pos)
FROM adv_zone az left join adv_list al on az.id_zone = al.id_pos
group by 1,2
having count(al.id_pos) = 0
Por lo que parece, en un anterior post no sabes que son esos az, al que están puestos: simplemente alias de los nombres de tablas, los usas para acortar el nombre o, incluso, para diferenciar cuando cruzas una tabla consigo misma.
Esto lo que hace es cruzar las dos tablas y quedarse con aquellas filas de adv_zone que no tienen ningún registro de cruce en adv_list.
Espero que esto te ayude.
Un saludo.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 27/05/2005 a las 01:40
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 09:49.