MySQL - 加入三个表并显示数据(即使找不到匹配项)

时间:2016-10-31 15:19:17

标签: mysql join

我有一个加入三个表的查询:

  1. 特色{id,name,description,image}
  2. 医生{id,姓名,描述,照片}
  3. doc_spec {id,id_doc,id_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
    
  4. 查询完全可以使用连接其他两个表的doc_spec表从两个表中检索数据,但问题是我的医生有指定专长。< / p>

    我能做什么,而不是在doc_spec表上没有匹配时显示行,而是在专业列上以NULL值检索该行?如果可能而不是显示null,如果它可以保存“无专业指定”之类的值,那将是完美的。

    更新

    我通过使用RIGHT JOIN和LEFT JOIN找到了一种方法,但我不确定这是否是正确的方法,我仍然希望能够保持“没有专业指定”这样的值而不是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
    

1 个答案:

答案 0 :(得分:0)

我认为这应该可以解决问题:

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