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

Duda con LEFT JOIN

Estas en el tema de Duda con LEFT JOIN en el foro de Mysql en Foros del Web. QUe tal amigos, mi duda es esta: Cuando hago un query usando LEFT JOIN a la columna en comun de ambas tablas y si este ...
  #1 (permalink)  
Antiguo 16/03/2011, 09:18
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 14 años, 3 meses
Puntos: 31
Duda con LEFT JOIN

QUe tal amigos, mi duda es esta:

Cuando hago un query usando LEFT JOIN a la columna en comun de ambas tablas y si este valor es encontrado siempre trae dos filas iguales? porque me pasa eso, y para solucionarlo le hago un GROUP BY(a la columna en comun) ya que al data siempre es igual
  #2 (permalink)  
Antiguo 16/03/2011, 09:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 8 meses
Puntos: 2658
Respuesta: Duda con LEFT JOIN

Cita:
Cuando hago un query usando LEFT JOIN a la columna en comun de ambas tablas y si este valor es encontrado siempre trae dos filas iguales?
En realidad, no, la idea es que te devuelva lo que hay en la primera tabla con todas las de la segunda, haya o no coincidencias, pero poniendo NULL donde no hay coincidencias.
Ahora bien, el problema puede estar en la forma de escribir la consulta. Posteala y veamos qué está pasando realmente.
__________________
¿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 16/03/2011, 09:25
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 14 años, 3 meses
Puntos: 31
Respuesta: Duda con LEFT JOIN

OK amigo:

Código SQL:
Ver original
  1. SELECT e.cal_id,e.cal_cliente, CONCAT(cl.cal_nombre1,' ',cl.cal_apellido1,' ',cl.cal_apellido2)
  2. AS cal_cliente_nombre,e.cal_empresa,c.cal_nombre
  3. AS cal_empresa_nombre,e.cal_estado,e.cal_create_by,CONCAT(u.cal_lastname,' ', u.cal_firstname)
  4. AS cal_creador,e.cal_date,e.cal_time,e.cal_name,e.cal_location,e.cal_description,
  5. ce.cal_entry AS calcal_close_entry
  6. FROM webcal_entry e
  7. INNER JOIN webcal_user u ON u.cal_login = e.cal_create_by
  8. LEFT JOIN webcal_company c ON c.cal_company_id = e.cal_empresa
  9. LEFT JOIN webcal_client cl ON cl.id_cliente = e.cal_cliente
  10. LEFT JOIN webcal_close_entry ce ON e.cal_id = ce.cal_entry
  11. WHERE e.cal_id = 300
  12. GROUP BY(calcal_close_entry )
  #4 (permalink)  
Antiguo 16/03/2011, 09:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 8 meses
Puntos: 2658
Respuesta: Duda con LEFT JOIN

Cuesta un poco entender la idea de qué es lo que representa cada cosa, pero mi pregunta es: SI la tabla principal es web_cal_entry y su PK es cal_id, ¿no sería suficiente con ese WHERE?:
Código SQL:
Ver original
  1. WHERE e.cal_id = 300
Porque solamente estaría devolviendo un registro, y en todo caso, si ese registro termina vinculado a más de un registro de las tablas webcal_company, webcal_client y webcal_close_entry, ¿no deberías estar agrupando por esa PK y no por una que puede dar duplicidades?
Algo como:
Código MySQL:
Ver original
  1.    e.cal_id,
  2.    e.cal_cliente,
  3.    CONCAT(cl.cal_nombre1,' ',cl.cal_apellido1,' ',cl.cal_apellido2)   cal_cliente_nombre,
  4.    e.cal_empresa,
  5.    c.cal_nombre  cal_empresa_nombre,
  6.    e.cal_estado,
  7.    e.cal_create_by,
  8.    CONCAT(u.cal_lastname,' ', u.cal_firstname)  cal_creador,
  9.    e.cal_date,
  10.    e.cal_time,
  11.    e.cal_name,
  12.    e.cal_location,
  13.    e.cal_description,
  14.    ce.cal_entry calcal_close_entry
  15.    webcal_entry e INNER JOIN webcal_user u ON u.cal_login = e.cal_create_by
  16.    LEFT JOIN webcal_company c ON c.cal_company_id = e.cal_empresa
  17.    LEFT JOIN webcal_client cl ON cl.id_cliente = e.cal_cliente
  18.    LEFT JOIN webcal_close_entry ce ON e.cal_id = ce.cal_entry
  19.    e.cal_id = 300
  20. GROUP BY e.cal_id;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 16/03/2011, 10:38
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 14 años, 3 meses
Puntos: 31
Respuesta: Duda con LEFT JOIN

lo que pasa estimado las filas duplicadas me traen con este LEFT JOIN
Código SQL:
Ver original
  1. LEFT JOIN webcal_close_entry ce ON e.cal_id = ce.cal_entry

No importa, con el gruoup by se arreglo

Esto puede ser posible por crear mal las tablas?
  #6 (permalink)  
Antiguo 16/03/2011, 10:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 8 meses
Puntos: 2658
Respuesta: Duda con LEFT JOIN

Sin conocer más sobre el diseño, y los datos que existen en las tablas, es difícil decirlo. Los nombres en sí no dicen mucho. Por allí un diagrama de la base podría ayudar a comprender, pero hay que saber qué es ese sitema.
En principio, habría que revisar esa relación, que es la que esta generando la duplicidad.
__________________
¿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: join, left
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 04:08.