MySQL-连接三个表并显示数据(即使没有找到匹配项)

MySQL-连接三个表并显示数据(即使没有找到匹配项),mysql,join,Mysql,Join,我有一个连接三个表的查询: 专业{id,名称,描述,图像} 医生{id、姓名、描述、照片} 文档规格{id,id\u doc,id\u spec} SELECT d.id, d.name, d.description, d.photo, GROUP_CONCAT(s.name SEPARATOR ', ') AS 'specialty' FROM doc_spec ds INNER JOIN doctors d ON ds.id_doc=d.id

我有一个连接三个表的查询:

  • 专业{id,名称,描述,图像}
  • 医生{id、姓名、描述、照片}
  • 文档规格{id,id\u doc,id\u spec}

    SELECT
       d.id,
       d.name,
       d.description,
       d.photo,
       GROUP_CONCAT(s.name SEPARATOR ', ') AS 'specialty'
    FROM
       doc_spec ds
    INNER JOIN
       doctors d
    ON
       ds.id_doc=d.id
    INNER JOIN
       specialties s
    ON
       ds.id_spec=s.id
    GROUP BY
       d.id
    
  • 使用连接其他两个表的doc_spec表,查询可以很好地从这两个表检索数据,但问题是当我有一个医生没有指定的专业时

    我该怎么做才能在doc_spec表上没有匹配项时不显示行,而是在speciality列上使用空值检索行?如果可能的话,与其显示null,还不如将值设置为“No specials designed”,这样就很完美了

    更新

    我通过使用RIGHT JOIN和LEFT JOIN找到了一种方法,但我不确定这是否是正确的方法,我仍然希望能够保留“No speciality designed”这样的值,而不是null

        SELECT
           d.id,
           d.name,
           d.description,
           d.photo,
           GROUP_CONCAT(s.name SEPARATOR ', ') AS 'specialty'
        FROM
           doc_spec ds
        RIGHT JOIN
           doctors d
        ON
           ds.id_doc=d.id
        LEFT JOIN
           specialties s
        ON
           ds.id_spec=s.id
        GROUP BY
           d.id
    

    我认为这应该起作用:

    SELECT
       d.id,
       d.name,
       d.description,
       d.photo,
       IFNULL(GROUP_CONCAT(s.name SEPARATOR ', '), 'No specialities') AS 'specialty'
    FROM
       doc_spec ds
    RIGHT JOIN
       doctors d
    ON
       ds.id_doc=d.id
    LEFT JOIN
       specialities s
    ON
       ds.id_spec=s.id
    GROUP BY
       d.id
    

    您是否尝试过使用
    左侧外部联接
    而不是
    内部联接
    ?仅使用左侧不起作用,但如果我同时使用右侧和左侧都起作用,谢谢。是的,没有看到您从
    文档规格
    开始。很好。从左到右对数据进行排序,最左边是主数据,下面的所有数据都不太重要。所以你只剩下连接了。如果数据是必需的,则执行内部联接;如果可选,则使用外部联接。看起来你的问题是,你有你最需要的数据,而不是在表排序中的左上角或右上角。我明白了,@DanFromGermany。谢谢,为什么是-1?你能告诉我吗?你好,@vookash,它工作得很好这正是我要找的。谢谢至于-1不是我。我很高兴我能帮上忙:)