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

LEFT JOIN no me trae lo que deseo que hice mal?

Estas en el tema de LEFT JOIN no me trae lo que deseo que hice mal? en el foro de Mysql en Foros del Web. buenas tengo dos tablas tabla1: -codigo -especialidad -nombre tabla2 -codigo -especialidad -identificacion -puntuacion y realizo la siguiente consulta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT ...
  #1 (permalink)  
Antiguo 02/11/2010, 21:04
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 2 meses
Puntos: 461
LEFT JOIN no me trae lo que deseo que hice mal?

buenas tengo dos tablas
tabla1:
-codigo
-especialidad
-nombre

tabla2
-codigo
-especialidad
-identificacion
-puntuacion

y realizo la siguiente consulta

Código MySQL:
Ver original
  1. SELECT * FROM tabla1 LEFT JOIN tabla2 USING(codigo) WHERE identificacion='123';
me trae unicamente los datos que corresponden con la identificacion pero los otros datos de la tabla1 no me los trae, es imposible hacer lo que deseo verdad x la condicon?? o no?? gracias de antemano por la ayuda que me puedan brindar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #2 (permalink)  
Antiguo 02/11/2010, 21:50
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, 6 meses
Puntos: 2658
Respuesta: LEFT JOIN no me trae lo que deseo que hice mal?

LEFT JOIN opera sobre la tabla de la izquierda, devolviendo los registros de esta, sin importar si hay o no coincidencias con la segunda. El hecho de que no devuelva datos de TABLA2 implica que no hay registros en la segunda que estén vinculados al identificacion "123".
Si quieres que te devuelva si y sólo si hay coincidencias entre ambas tablas debes usar INNER JOIN y no LEFT JOIN.
Código MySQL:
Ver original
  1. SELECT * FROM tabla1 INNER JOIN tabla2 USING(codigo) WHERE identificacion='123';
Lee un poco más sobre el uso de JOIN: 13.2.7.1. Sintaxis de JOIN
__________________
¿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 03/11/2010, 16:21
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 2 meses
Puntos: 461
Respuesta: LEFT JOIN no me trae lo que deseo que hice mal?

amigo gracias por tu respuestas pero creo que no me explique bien el problema es que deseo todos los datos de la tabla1, aunque no coincidan con la tabla2 un ejemplo para ver si lo pongo mejor
Código tablas:
Ver original
  1. tabla1                                         tabla2
  2. codigo | especialidad | nombre     codigo | especialidad | identificacion ! puntuacion
  3. 1           esp1             mate             1     esp1              123              50    
  4. 2           esp1             cast              2     esp1              456              100
  5. 3           esp1             geol
  6. 4           esp1             hist

deseo que me aparescan todos los datos de la tabla1 y los datos de la tabla2 solo los de la identificacion 123 por eso hacia esta consulta
Código MySQL:
Ver original
  1. SELECT * FROM tabla1 LEFT JOIN tabla2 USING(codigo) WHERE identificacion='123';
pero me devuelve solo este resultado
Código tablas:
Ver original
  1. codigo | especialidad | nombre     codigo | especialidad | identificacion ! puntuacion
  2. 1           esp1             mate             1     esp1              123              50
y yo kiero que me lo devuelva en este caso asi
Código tablas:
Ver original
  1. tabla1                                         tabla2
  2. codigo | especialidad | nombre     codigo | especialidad | identificacion ! puntuacion
  3. 1           esp1             mate             1     esp1              123              50    
  4. 2           esp1             cast              
  5. 3           esp1             geol
  6. 4           esp1             hist
eso tenia entendido que es con LEFT JOIN pero no se en q estoy fallando en la consulta o sera que no se puede asi como lo deseo???
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #4 (permalink)  
Antiguo 03/11/2010, 16:42
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, 6 meses
Puntos: 2658
Respuesta: LEFT JOIN no me trae lo que deseo que hice mal?

En tu caso, lo mejor es trabajar con una subconsulta que genere una tabla derivada en el FROM:
Código MySQL:
Ver original
  1.     tabla1 LEFT JOIN
  2.     (SELECT * tabla2 WHERE identificacion='123') T1 USING(codigo) ;
Ya que sólo quieres de la segunda tabla ciertos registros...
__________________
¿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 03/11/2010, 17:08
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 2 meses
Puntos: 461
Respuesta: LEFT JOIN no me trae lo que deseo que hice mal?

gracias por la ayuda creo que esta va a dar, xq estoy practicamente creando la tabla de datos cualquier cosa aviso saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 04/11/2010, 02:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 3 meses
Puntos: 574
Respuesta: LEFT JOIN no me trae lo que deseo que hice mal?

Otra solucion seria

Código MySQL:
Ver original
  1.    FROM tabla1 LEFT JOIN tabla2 USING(codigo)
  2.    WHERE identificacion='123' OR identificacion IS NULL;

No se cual es mas eficiente.

Quim
  #7 (permalink)  
Antiguo 04/11/2010, 16:56
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 2 meses
Puntos: 461
Respuesta: LEFT JOIN no me trae lo que deseo que hice mal?

Cita:
Iniciado por quimfv Ver Mensaje
Otra solucion seria

Código MySQL:
Ver original
  1.    FROM tabla1 LEFT JOIN tabla2 USING(codigo)
  2.    WHERE identificacion='123' OR identificacion IS NULL;

No se cual es mas eficiente.

Quim
interesante respuesta tendria que verificar, asi me traeria todo tambien?? yo lo aplique como me indico el amigo gnzsoloyo y me funciono como lo necesitava tendria que probar gracias por tu ayuda saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: join, left, mal
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 21:03.