Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/10/2014, 17:33
Avatar de gnzsoloyo
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: Me regresa campo null

LEFT JOIN devuelve todo lo que está en la primer tabla, tenga o no relación con la segunda, pero en la segunda siempre devuelve NULL en aquellos casos donde no hay registros relacionados.
Es el comportamiento normal y esperado de LEFT JOHN. En todo caso, si quieres sólo lo que coincida si o sí, debes usar INNER JOIN.

Ahora bien, simplificando la escritura de tu query con ayuda de algunos alias, tenemos esto:
Código MySQL:
Ver original
  1.     CA.iCodigoAlumno,
  2.     CA.vchNombres,
  3.     CA.vchApellidos,
  4.     CA.dtFechaNac,
  5.     CRAM.vchCodigoMateria,
  6.     CRAM.fcalificacion,
  7.     CM.vchMateria
  8.     cat_alumnos CA
  9.     LEFT JOIN cat_rel_alumno_materia CRAM ON CA.iCodigoAlumno = CRAM.icodigoAlumno
  10.     LEFT JOIN cat_materias CM             ON CRAM.vchCodigoMateria = CM.vchMateria
  11.     CA.iCodigoAlumno = '210'

Esta query devuelve al alumno de codigo 210, esté o no relacionado a las materias en las que está inscripto. Esto quiere decir que si el alumno está inscripto a 2 materias, saldrán las dos. Pero por cada una de esas, devolverá ademas todas las asociaciones donde no hay materia correspondiente.
La query, en otras palabras, no tiene mucho sentido...

La preguna es, entonces, ¿qué es lo que quieres obtener? ¿Las materias a que está registrado el alumno?
Eso sería:
Código MySQL:
Ver original
  1.     CA.iCodigoAlumno,
  2.     CA.vchNombres,
  3.     CA.vchApellidos,
  4.     CA.dtFechaNac,
  5.     CRAM.vchCodigoMateria,
  6.     CRAM.fcalificacion,
  7.     CM.vchMateria
  8.     cat_alumnos CA
  9.     INNER JOIN cat_rel_alumno_materia CRAM ON CA.iCodigoAlumno = CRAM.icodigoAlumno
  10.     INNER JOIN cat_materias CM            ON CRAM.vchCodigoMateria = CM.vchMateria
  11.     CA.iCodigoAlumno = 210
Ahora bien, si esto no devuelve datos es porque alguna parte de la relación no se está cumpliendo, es decir, o no existen las materias asociadas al alumno en la segunda tabla, o esa tabla contiene IDs de materias que no existen.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 21/10/2014 a las 19:42