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

Obtener todos los registros no pertenecientes a un evento

Estas en el tema de Obtener todos los registros no pertenecientes a un evento en el foro de Mysql en Foros del Web. Hola a todos! como podría obtener todos los contactos que no estén relacionados con un evento en una consulta muchos a muchos. Tengo este código: ...
  #1 (permalink)  
Antiguo 28/02/2015, 19:10
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Obtener todos los registros no pertenecientes a un evento

Hola a todos! como podría obtener todos los contactos que no estén relacionados con un evento en una consulta muchos a muchos. Tengo este código:

Código SQL:
Ver original
  1. SELECT * FROM contactos C
  2. INNER JOIN eventos_contactos EC ON C.id != EC.id_contacto
  3. INNER JOIN eventos E ON EC.id_evento = E.idevento WHERE E.idevento = :id_evento ;

Gracias a todos

Última edición por gnzsoloyo; 28/02/2015 a las 19:24
  #2 (permalink)  
Antiguo 28/02/2015, 19:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Obtener todos los registros no pertenecientes a un evento

Está mal escrita, y muy mal usado el JOIN.
El INNER JOIN sólo puede vincular registros que coinciden en una condición, pero no devuelve los no coincidentes, por lo que el primer INNER JOIN devuelve una tabla nula, y a partir de alli esa consulta no devuelve resultados.
Lo que debes usar es LEFT JOIN, no INNER JOIN, y escrito de otra forma.

Código SQL:
Ver original
  1. SELECT *
  2. FROM contactos C
  3.     LEFT JOIN eventos_contactos EC ON C.id = EC.id_contacto
  4.     INNER JOIN eventos E ON EC.id_evento = E.idevento
  5. WHERE EC.idevento = eventobuscado
  6. AND EC.id_contacto IS NULL;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/02/2015, 20:27
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Obtener todos los registros no pertenecientes a un evento

Ante todo, agradecerte la ayuda y pedagogía empleadas en la respuesta, pero no me ha funcionado bien...
Bueno la cuestión es que de esta forma si me funciona por si también le puede servir de ayuda a alguien:
Código SQL:
Ver original
  1. SELECT * FROM contactos
  2. WHERE id NOT IN(SELECT id_contacto FROM eventos_contactos
  3. WHERE id_evento = :id_evento)
Sería lo mismo pero más simple, ¿no?

Última edición por rutame; 28/02/2015 a las 20:29 Razón: cambiar código
  #4 (permalink)  
Antiguo 28/02/2015, 21:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Obtener todos los registros no pertenecientes a un evento

Son basicamente equivalentes, aunque para estar más cerca sería:
Código MySQL:
Ver original
  1. SELECT C.*
  2. FROM contactos C
  3.     LEFT JOIN eventos_contactos EC ON C.id = EC.id_contacto
  4. WHERE EC.idevento = eventobuscado
  5. AND EC.id_contacto IS NULL;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
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 17:42.