![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
21/05/2012, 02:40
|
Colaborador | | Fecha de Ingreso: marzo-2008 Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 10 meses Puntos: 574 | |
Respuesta: duda con los joins poner esto
select * from tblcalificaciones
o directamente la tabla es lo mismo.
A INNER JOIN B muestra solo los pares de registros en que el campo de relacion son iguales, en el caso de alumnos y notas de una materia mostrará solo los alumnos que tengan nota en esa materia. Si no se filtra por materia mostrará todos los alumnos que tengan ALGUNA nota, NO mostrará alumnos que no tengan notas.
INNER JOIN los alumnos con ALGUNA nota
INNER JOIN + WHERE idMateria=1 solo los alumnos que tengan nota en matematicas...
A LEFT JOIN B muestra TODOS los registros de A tengan o no pareja en B, en el caso de los alunos y materias si filtramos por materia (tabla B), mostrará los alumnos que tengan nota en esa materia. Si filtramos por grupo (tabla A) mostrará todos los alumnos de el grupo tengan o no notas.... Si no se filtra por nada mostrá TODOS los alumnos tengan o no notas.
LEFT JOIN TODOS los alumnos tengan o no notas (con sus notas)
LEFT JOIN + WHERE grupo="G1" TODOS los alumnos de G1 tengan o no notas
LEFT JOIN + WHERE grupo="G1" AND idMateria=1 TODOS los alumnos de G1 que tengan nota de matematicas
LEFT JOIN + WHERE idMateria=1 TODOS los alumnos que tengan nota de matematicas (igual que el INNER)
Luego al contrario de lo que se ha dicho si se quiere todos los alumnos de un grupo se tiene que utilizar left join. Pero si ademas de filtrar por grupo tambien se filtra por materia y queremos los nulos se debe agregar una condicion OR....
LEFT JOIN + WHERE a.grupo="G1" AND (n.idmateria=1 OR n.idmateria IS NULL)
Esto dará TODOS los alumnos del grupo G1 y su nota de matematicas (aun que no tengan)
Espero un % de la nota que saquen!!!!
__________________ Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados. |