Para los que no se enteran (y por si le pasa a alguien vamos
)
Royer me envio la muestra de sus 3 tablas por MP (protegiendo sus datos al acceso publico esta en su derecho
) y bueno, resulta ser que los datos que el quiere sacar existen en la Tabla Alumnos y la tabla Materias pero no tienen ningun registro en Kardex
(Solo de los alumnos que el quiere sacar y les pasa esto). Por lo que le respondi:
Royer me aclaraste mejor ahora
entonces el alumno que NO tiene ningun registro en la tabla Kardex ... hay es que esta tu problema chico
Mira agregue un usuario extra a la tabla Alumnos:
mysql> SELECT * FROM alumnos;
+------+-----------+---------+-----------+---------+--------------+-------+--------+-------+
| id | matricula | nombres | apellidos | carrera | fechaingreso | turno | grupo | salon |
+------+-----------+---------+-----------+---------+--------------+-------+--------+-------+
| 6 | 919 | PEPE | TONO | PREPA | 0000-00-00 | TARDE | GRUPO1 | 1 |
| 7 | 212 | PANCHO | PEREZ | PREPA | 0000-00-00 | TARDE | GRUPO2 | 1 |
| 9 | 100 | MARIA | LOPEZ | NULL | NULL | TARDE | GRUPO1 | 1 |
+------+-----------+---------+-----------+---------+--------------+-------+--------+-------+
Pero no le agregue absolutamente nada en Kardex a este nuevo usuario (QUe es MARIA LOPEZ):
mysql> SELECT * FROM kardex;
+------+-----------+-------------+-------------+---------------+---------+------------+
| id | matricula | tetramestre | materia | codigomateria | calif1A | fechacalif |
+------+-----------+-------------+-------------+---------------+---------+------------+
| 6 | 919 | 1 | INGLES I | 10 | 90 | 2010-10-20 |
| 6 | 919 | 1 | MATEMATICAS | 11 | NULL | 2010-10-20 |
| 7 | 212 | 1 | INGLES I | 10 | 88 | 2010-10-20 |
| 7 | 212 | 1 | MATEMATICAS | 11 | NULL | 2010-10-20 |
| 8 | 818 | 1 | MATEMATICAS | 11 | NULL | 2010-09-20 |
| 8 | 818 | 1 | INGLES I | 10 | NULL | 2010-09-20 |
+------+-----------+-------------+-------------+---------------+---------+------------+
6 ROWS IN SET (0.00 sec)
Ahora hago tu magica consult a a MARIA y.....
mysql> SELECT k.fechacalif, a.apellidos, a.nombres AS nombreAlumno, m.materia AS nombreMateria, ifnull( k.calif1A, 'NO CALIFICADO') AS Materia FROM materias m LEFT OUTER JOIN kardex k ON m.codigomateria = k.codigomateria LEFT OUTER JOIN alumnos a ON k.matricula = a.matricula WHERE k.matricula = 100 OR k.matricula IS NULL;
+------------+-----------+--------------+---------------------------+---------------+
| fechacalif | apellidos | nombreAlumno | nombreMateria | Materia |
+------------+-----------+--------------+---------------------------+---------------+
| NULL | NULL | NULL | taller de redaccion I | NO CALIFICADO |
| NULL | NULL | NULL | metodologia de la lectura | NO CALIFICADO |
| NULL | NULL | NULL | historia moderna | NO CALIFICADO |
+------------+-----------+--------------+---------------------------+---------------+
Bingo
Ahora quieres saber porque ocurrio esto??? Pues precisamente chico porque MARIA solo existe en la tabla Alumnos y Materias
sin embargo tu haces la comparaciones con Kardex.. pero como esta alumna NO tiene nada en Kardex... como va a retonarte las calificaciones que se reflejan en la tabla Kardex???? Si no existen datos de ningun tipo de ella en Kardex???? Sin embargo si existen datos de ella en la tabla Materia y Alumnos... Recuerdate que el campo
calif1A esta en la tabla Kardex y es ese campo o sea mira tu consulta SQL dice:
m.codigomateria = k.codigomateria
O sea las materias que esten en la tabla Kardex que concuerden con las materias que esten en la tabla Materias... pero si tu no tienes registros de algun alumno en la tabla Kardex... como quieres que te retorne las materias que estan ahi dentro???
O sea ya que solamente tienes datos en la tabla Alumnos y Materias para el caso mostrado tu comparacion de tu consulta dice:
eft outer join alumnos a on k.matricula = a.matricula
Pero... k.matricula pertenece a la tabla Kardex no??? y si Kardex no tiene registros aca para dicho alumno... que va a retornarte para la calificacion??
Nada (Que es lo que esta pasando).
Tendras que agregar 1 campo extra en la tabla Materias para que puedas relacionar las materias con alumnos
sin que estas esten obligatoriamente en Kardex... o registrar datos en la tabla Kardex para todos los alumnos aunque el valor
sea null.