SQL Server - OUTER JOINS CON WHERE

   
Vista:

OUTER JOINS CON WHERE

Publicado por Daniel (10 intervenciones) el 20/05/2008 05:12:10
Hola a todos de nuevo.. necesito su ayuda.. aunke creo que mis problemas son un pocos complicados espero que halla aguien que me pueda ayudar.. bien mi problema hoy es el siguiente

En uan consulta con mas de dos tablas relacionadas solo se arrojan solo aquellos registros que coinsiden en sus campos llaves que mantienen la relacion... si quiero forzar a que aparezacan aquellos registros que no coincidan debo de usar segun del lado que este la tabla de la cual queiero ver sus registros.. LEFT O RIGHT JOIN... Bien, eso es vdd mientras no use porsteriormente en la consulta la clausula WHERE.. ya que me limita los datos... como puedo hacer a que aparezacan los registros que no coinciden aunke use la clausula WHERE, ya que es necesaria en mi consulta.

EJEMPLO
Hay una Tabla Alumnos con ID_Alumno...Una Tabla Materias con ID_Materia y una Tabla Calificacion Con los campos Calificacion y Faltas y los IDs de alumno y materias para saber que calificacion tiene cada alumno en cada materia... al hacer una consulta que me arrojoe los resultados anteriores sobre calificaciones de alumnos.. solo me despliega aquellos registros que se encuentaran en la tabla Calificacion ya que el Where limita la salida... por ejemplo quiero una consulta con estos resultados..

MATERIA ESPAÑOL

ALUMNO CALI FALTAS
-------------- -------------- -------------
Daniel 9 0 -- --cal capturada
Ana 6 3 -- --cal capturada
Rodrigo NULL NULL -- --cal no capturada
Jose Luis NULL NULL -- --cal no capturada pero que quiero que que aparezca los alumnois aunke no este capturado su id en la tabla calificaciones y sus campos cal y faltas aparezcan en null

la cansulta que tengo es la siguiente y sin el WHERE funciona pero despliga a todos los alumnos y yo solo kiero un desplegado de aquellos que lleven la materia en la condicion para su posterior captura de cal y faltas

SELECT APaterno+' '+ AMaterno+' '+ Nombre AS ALUMNNO, Calificacion AS CAL, Faltas
FROM Persona P INNER JOIN Alumno A ON P.ID_Persona = A.ID_Persona LEFT OUTER JOIN Calificacion_Bimestre CB ON A.ID_Alumno = CB.ID_Alumno
WHERE CB.ID_Materia = 'ESP01'

Si alguien me puede ayudar... se lo agradeceria...SUGERENCIAS???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:OUTER JOINS CON WHERE

Publicado por Isaias (3308 intervenciones) el 21/05/2008 20:19:00
Cambie su OUTER por un FULL JOIN, veamos que sucede..................
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OUTER JOINS CON WHERE

Publicado por pacopaz (131 intervenciones) el 28/05/2008 00:08:17
Has intentado meter la condición dentro del join? El que sea parte del join hace que cumpla las funciones de este y no lo hace excluyente, como el caso del where.
Aunque no estoy seguro de que funcione, podrías intentarlo:

SELECT APaterno+' '+ AMaterno+' '+ Nombre AS ALUMNNO, Calificacion AS CAL, Faltas
FROM Persona P INNER JOIN Alumno A ON P.ID_Persona = A.ID_Persona LEFT OUTER JOIN Calificacion_Bimestre CB ON A.ID_Alumno = CB.ID_Alumno
AND CB.ID_Materia = 'ESP01'

Espero que sea útil.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar