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

Problemas con LEFT JOIN

Estas en el tema de Problemas con LEFT JOIN en el foro de Mysql en Foros del Web. Que tal muchachos, tengo una duda ... Tengo este query @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT     a.idAlumno ,     nombre , ...
  #1 (permalink)  
Antiguo 25/02/2012, 01:34
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 7 meses
Puntos: 31
Problemas con LEFT JOIN

Que tal muchachos, tengo una duda ...

Tengo este query
Código MySQL:
Ver original
  1.     a.idAlumno,
  2.     nombre,
  3.     aPaterno,
  4.     aMaterno,
  5.     ap.matricula,
  6.     m.matricula total,
  7.     (m.matricula-ap.matricula) debe
  8. FROM alumnopago ap
  9. LEFT JOIN alumno a
  10. ON a.idAlumno = ap.idAlumno
  11. LEFT JOIN matricula m
  12. ON m.idMatricula = ap.idMatricula;

Que trae la tabla alumno, alumnopago, y matricula

En matricula yo guardo el monto que tiene cada periodo, es decir durante el año se pagan dos veces la matricula, para el perido I y el periodo II.

Ahora en la tabla AlumnoPago yo guardo la cantidad que esta pagando, y uno la tabla AlumnoPago con Matricula con el campo ambiguo idMatricula, de esta manera yo puedo saber a que periodo pertenece ese pago, y cuanto es lo que tiene que pagar

Y la tabla alumno la relaciono con alumnopago con el campo idAlumno, al ejecutar mi query y no habiendo registros en alumnopago, no trae nada, por mas que uso leftjoin, es decir si usara INNER JOIN estoy diciendole que la relacion deberia existir estrictamente, pero con LEFT JOIN le digo lo contrario, que traiga a partir de lo que hay a la izquierda no, osea partiendo de alumnos, y al final no me trae nada, pero cuando corro este query si me trae algo

Código MySQL:
Ver original
  1.     a.idAlumno,
  2.     nombre,
  3.     aPaterno,
  4.     aMaterno,
  5.     ap.matricula,
  6.     m.matricula total,
  7.     (m.matricula-ap.matricula) debe
  8. FROM alumnopago ap
  9. LEFT JOIN alumno a
  10. ON a.idAlumno = ap.idAlumno;

Ya me trae lo de la izquierda, estos querys yo los corro normal en SQLServer 2008, no e tenido problemas, o acaso tnego que crear la relacion previamente para usar correctamente los INNER Y LEFT JOIN, ya que no e creado clave foraneas.
  #2 (permalink)  
Antiguo 25/02/2012, 06:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problemas con LEFT JOIN

El orden de los factores si altera el producto en el SQL.
El asunto es simple: Como LEFT JOIN trae lo de la tabla izquierda, tenga o no coincidencias con la derecha, pero tu estás poniendo como primera tabla la de los pagos, la respuesta será la lista de pagos, tengan o no coincidencias con los alumnos... Y como no hay pago sin alumno, está funcionando como INNER JOIN.
Lo que tienes que poner primero es la tabla donde está la lista mayor, que de donde la segunda toma datos, esto es:
Código MySQL:
Ver original
  1.     a.idAlumno,
  2.     nombre,
  3.     aPaterno,
  4.     aMaterno,
  5.     ap.matricula,
  6.     m.matricula total,
  7.     (m.matricula-ap.matricula) debe
  8.     alumno a LEFT JOIN alumnopago ap ON a.idAlumno = ap.idAlumno
  9. WHERE (TRUE OR ap.matricula IS NULL);
De ese modo traerá a toda la lista de alumnos hayan hecho o no pagos.
Cita:
estos querys yo los corro normal en SQLServer 2008
Eso es medio irrelevante, porque la lógica interna de los DBS es diferente en cada uno (en Oracle esta consulta no funcionaría, porque se escribe distinto). Lo que sucede es que SQL Server lo implementa de otro modo y requiere otras cláusulas.
Cuando cambias de DBMS tienes que andar todo el tiempo con el manual a un lado. Siempre. No des por sentado que todos los DBMS hacen las cosas de la misma forma.
__________________
¿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 25/02/2012, 07:48
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 7 meses
Puntos: 31
Respuesta: Problemas con LEFT JOIN

Disculpa yo habia escrito mi query en realidad de esta manera ... lo que pasa que estuve haciendo pruebas y copie una de las prueba jejeje

Código MySQL:
Ver original
  1.     a.idAlumno,
  2.     nombre,
  3.     aPaterno,
  4.     aMaterno,
  5.     ap.matricula,
  6.     m.matricula total,
  7.     (m.matricula-ap.matricula) debe
  8.     alumno a
  9. LEFT JOIN alumnopago ap
  10. ON a.idAlumno = ap.idAlumno
  11. LEFT JOIN matricula m
  12. ON m.idmMatricula = ap.idMatricula

Supuestamente deberia traerme todo, con la matricula incluida ya que necesito saber cuanto es el monto a pagar, por la matricula.

Osea en conclucion deberia traer esto

1,'Edward','Flores','Diaz',NULL,350,350

Eso es el resultado que yo quiero tener, con esto ya se si el pago la matricula o no

Etiquetas: join, left, query, registros, select, sql, tabla, campos
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 07:54.