【发布时间】:2016-10-31 15:19:17
【问题描述】:
我有一个连接 三个 表的查询:
- 专业 { id, name, description, image }
- 医生{身份证、姓名、描述、照片}
-
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 值的行?如果可能,而不是显示 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
【问题讨论】:
-
你试过
LEFT OUTER JOIN而不是INNER JOIN吗? -
不能只使用 left 但如果我同时使用 right 和 left 就可以使用,谢谢
-
啊,是的,没看到你以
doc_specs开头。非常好。 -
从左到右排序你的数据,最左边是主要的,后面的所有数据都不重要。所以你只剩下左连接了。如果数据是强制性的,则进行内连接,如果是可选的,则使用外连接。看起来您的问题是,您最需要的数据不在表格排序的左上角或右上角。
-
我明白了,@DanFromGermany。谢谢。