Ver Mensaje Individual
  #7 (permalink)  
Antiguo 21/05/2012, 02:40
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
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.