代码之家  ›  专栏  ›  技术社区  ›  Dipak

Mysql LEFT JOIN with IS NULL返回NULL结果

  •  1
  • Dipak  · 技术社区  · 8 年前

    我试图选择表中不存在的行。

    student , cls , sec , sch std_sch . 在这里,我想从 哪些不在 附件 但是 左连接 具有 为空 正在返回空结果。

    表 cls公司 -班级名单

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

    表 秒 -章节列表

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

    表 附件

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

    表 学生

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

    表 sdt_sch

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

    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 
    

    预期结果 应该是这样的:因为第一奖学金( sch - 1 )表中存在 sdt\ U sch公司 . 但这一行的结果是空的

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

    我已附上 SQL Fiddle 也

    1 回复  |  直到 8 年前
        1
  •  1
  •   Ranjit Singh    8 年前

    一点以下怎么样

    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;
    

    小提琴: here

    Left JOIN 
      sch ON sch.id != std_sch.sch_id or std_sch.sch_id is null