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

[SOLUCIONADO] Me regresa campo null

Estas en el tema de Me regresa campo null en el foro de Mysql en Foros del Web. TENGO ESTA CONSULTA ENTRE 3 TABLAS RELACIONADAS CAT_ALUMNOS CAT_MATERIAS CAT_REL_ALUMNO_MATERIA @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT cat_alumnos . iCodigoAlumno , cat_alumnos . vchNombres , ...
  #1 (permalink)  
Antiguo 21/10/2014, 16:58
 
Fecha de Ingreso: julio-2014
Mensajes: 10
Antigüedad: 9 años, 9 meses
Puntos: 0
Me regresa campo null

TENGO ESTA CONSULTA ENTRE 3 TABLAS RELACIONADAS

CAT_ALUMNOS
CAT_MATERIAS
CAT_REL_ALUMNO_MATERIA


Código SQL:
Ver original
  1. SELECT cat_alumnos.iCodigoAlumno,cat_alumnos.vchNombres,cat_alumnos.vchApellidos, cat_alumnos.dtFechaNac,cat_rel_alumno_materia.vchCodigoMateria,cat_rel_alumno_materia.fcalificacion,
  2. cat_materias.vchMateria
  3.  
  4. FROM cat_alumnos
  5.  
  6. LEFT JOIN  cat_rel_alumno_materia  ON cat_alumnos.iCodigoAlumno = cat_rel_alumno_materia.icodigoAlumno  
  7. LEFT JOIN  cat_materias ON cat_rel_alumno_materia.vchCodigoMateria = cat_materias.vchMateria
  8. WHERE cat_alumnos.iCodigoAlumno = '210'
ME DEVUELVE ESTO


Y SI TENGO DATOS




Y NO ENTIENDO POR QUE ME DEVUELVE VALOR NULL

ESPERO Y ME PUEDAN ASESORAR


GRACIAS

Última edición por gnzsoloyo; 21/10/2014 a las 19:21
  #2 (permalink)  
Antiguo 21/10/2014, 17:33
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: 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
  #3 (permalink)  
Antiguo 22/10/2014, 08:35
 
Fecha de Ingreso: julio-2014
Mensajes: 10
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Me regresa campo null

Es correcto no me devuelve nada




lo que quiero obtener es


en teoria las 3 tablas estan relacionadas asi

  #4 (permalink)  
Antiguo 22/10/2014, 08:55
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: Me regresa campo null

Las tablas estarán relacionadas, pero tienes un error de datos. tan simple como eso.

Según tu esquema, Tienes Alumnos, Materias, y una tercera tabla que relaciona Alumnos con Materias. Bueno, al menos una de las tablas no contiene los datos que supones debes tener.
Vale decir, supongamos:
Cita:
Alumno
1 Juan
2 Adriana
3 Javier
con estas materias:
Cita:
Materia
1 Geografia
2 Informatica
3 Algebra
y sobre la base de eso supongamos que Adriana esta inscipta en Algebra e Informática, y Javier en Geografía y Álgebra. En ese contexto la tercera trabla contendría esto:
Cita:
Alumno_Materia
idAlumno IdMateria
2 2
2 3
3 1
3 3
Bueno, eso es lo que no se cumple en tu caso...

¿Se entiende?
__________________
¿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 24/10/2014, 10:35
 
Fecha de Ingreso: julio-2014
Mensajes: 10
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Me regresa campo null

Quedo resulto asi
Código SQL:
Ver original
  1. SELECT
  2.     CA.iCodigoAlumno,
  3.     CA.vchNombres,
  4.     CA.vchApellidos,
  5.     CA.dtFechaNac,
  6.     CRAM.vchCodigoMateria,
  7.     CRAM.fcalificacion,
  8.     CM.vchMateria
  9. FROM
  10.     cat_alumnos CA
  11.     INNER JOIN cat_rel_alumno_materia CRAM ON CA.iCodigoAlumno = CRAM.icodigoAlumno
  12.     INNER JOIN cat_materias CM            ON CRAM.vchCodigoMateria = CM.vchCodigoMateria
  13. WHERE
  14.     CA.iCodigoAlumno = '210'
[/QUOTE]
saludos y gracias

Última edición por gnzsoloyo; 24/10/2014 a las 10:44

Etiquetas: campo, join, null, select, tabla
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 03:47.