我有一个加入三个表的查询:
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
查询完全可以使用连接其他两个表的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
答案 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