Mysql LEFT JOIN con IS NULL regresar resultado nulo

votos
1

Estoy tratando de seleccionar la fila que no está en la tabla.

En resumen, hay cinco mesas student, cls, sec, sch, std_sch. Aquí, quiero seleccionar las filas de std_sch los que no están en sch Pero LEFT JOIN con IS NULL está regresando resultado nulo.

Tabla cls- listas de Clase

id  |   ttl
===========
1   |   One
2   |   Two

Tabla sec- listas de la sección

id  |   ttl
===========
1   |   A
2   |   B

Tabla sch- listas de las becas

id  |   ttl
===============
1   |   First
2   |   Second
3   |   Third

Mesa student

id  |   ttl |   cls |   sec
===========================
1   |   John|   1   |   1
2   |   Paul|   1   |   0

Tabla sdt_sch- listas de las becas asignadas a los estudiantes

id  |   s_id|   sdt_sch
=======================
1   |   1   |   1

Código mysql

SELECT
    student.id AS sid, 
    student.ttl AS stdt, 
    cls.ttl AS cls,
    sec.ttl AS sec, 
    GROUP_CONCAT(sch.ttl) AS sch 
FROM 
    student
JOIN
    cls ON cls.id=student.cls 
LEFT JOIN
    sec ON sec.id=student.sec
LEFT JOIN
    std_sch ON std_sch.s_id = student.id
LEFT JOIN 
    sch ON sch.id = std_sch.sch_id
WHERE
    cls.id = 1
AND
    std_sch.sch_id IS NULL
GROUP BY
    student.id 

El resultado esperado debe ser de la siguiente manera: En primer lugar, porque la beca ( sch - 1existe) está en la mesa sdt_sch. Pero me estoy resultados nulos sobre esta fila

sid |   stdt|   cls |   sec|    sch
============================================
1   |   John|   One |   A   |   Second,Third
2   |   Paul|   One |   A   |   First,Second,Third

He adjuntado - SQL violín también

Publicado el 20/10/2018 a las 10:43
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

¿Qué hay de por debajo de uno

SELECT
  student.id AS sid, 
  student.ttl AS stdt, 
  cls.ttl AS cls,
  sec.ttl AS sec, 
  GROUP_CONCAT(sch.ttl) AS sch 
FROM 
  student
inner JOIN
  cls ON cls.id=student.cls 
LEFT JOIN
  sec ON sec.id=student.sec
left JOIN
  std_sch ON std_sch.s_id = student.id 
Left JOIN 
  sch ON sch.id != std_sch.sch_id or std_sch.sch_id is null
WHERE
  cls.id = 1
GROUP BY student.id;

Violín: aquí

La idea es encontrar el académico no asignado a un estudiante, por lo que hace a la izquierda se unen en SCH funcionará

Left JOIN 
  sch ON sch.id != std_sch.sch_id or std_sch.sch_id is null
Respondida el 20/10/2018 a las 11:28
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more