我有加入表的查询:MySQL的 - 加入三个表和显示数据(即使没有发现匹配)
- 特色{ID,名称,描述,图片}
- 医生{ID,名称,描述,照片}
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表,连接其他两个但问题是当我有一个医生,但不有一个指定的专业。
我该怎么做,以便在doc_spec表上没有匹配时不显示该行,而是在专业列上检索该行的NULL值?如果可能,而不是显示为空,如果它可以保存“没有专业指定”的值的话,那将是完美的。
UPDATE
我找到了一种方法,通过使用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
您是否尝试过的,而不是一个'INNER JOIN'一个'LEFT OUTER JOIN'? – smdrager
只适用**左**不适用,但如果适用**如果我同时使用**右**和**左**,谢谢 –
啊,是的,没有看到你以'doc_specs'开头。很好。 – smdrager