Left Join con condición que devuelva campos NULL si no hay coincidencia

publicado por: Anonymous

Intento hacer un select que me devuelva TODOS los cursos de la tabla curso, y además, si el email 1234 tiene algún registro en fkidcurso, se muestre el valor de progreso, es decir, si progreso está vacío lo mostrará igualmente, pero vacío.

Esta consulta me devolvería todos los registros:

SELECT * FROM Curso, usuarioCurso WHERE fkidcurso = id

Si filtro por fkidcurso, entonces no me devuelve todos los registros de curso ya que no tienen el mail asociado.

SELECT * FROM Curso, usuarioCurso WHERE fkidcurso = id AND email = '$email'

introducir la descripción de la imagen aquí

EDITO:
El left join no devuelve el registro correspondiente al “curso basico” (id

SELECT * FROM Curso LEFT JOIN usuarioCurso ON fkidcurso = id WHERE email = 1234′

solución

El problema es que quieres mostrar registros de la tabla del JOIN cuando no hay coincidencias en ella.

Para eso tienes que usar RIGHT OUTER JOIN o LEFT OUTER JOIN, lo que cambia es el orden en que pongas las tablas.

Por ejemplo:

SELECT * 
FROM usuarioCurso uc
RIGHT OUTER JOIN  Curso c ON (c.id = uc.fkidcurso AND email='1234');

Salida:

usuario_id  fkidcurso   email   progreso    id  titulo              resumen
------------------------------------------------------------------------------------------------------
1           1           1234    1           1   Principios básicos  En este curso aprenderás
NULL        NULL        NULL    NULL        2   Curso básico        Este es el curso básico

O bien:

SELECT * 
FROM Curso c
LEFT OUTER JOIN usuarioCurso uc ON (c.id = uc.fkidcurso AND email='1234');

Salida:

id  titulo              resumen                     usuario_id     fkidcurso    email   progreso
----------------------------------------------------------------------------------------------------------
1   Principios básicos  En este curso aprenderás    1              1            1234    1
2   Curso básico        Este es el curso básico     NULL           NULL         NULL    NULL

Fiddle

Aquí puedes ver una DEMOSTRACIÓN y hacer pruebas sobre ella.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *