我有以下三个表 'doctors' 、'specialities' 和 'doctor_specialities':
doctors
-id
-doctor_name
specialities
-id
-speciality_name
doctor_specialities
-id
-doctor_id
-speciality_id
我想返回所有医生以及他们的专业名称和专业 ID。一个医生可以有多个专业。
结果集应该是这样的:
id | doctor_name | speciality_id | speciality_name
--------------------------------------------------------------------------------------
1 | John | 5,3 | Speciality1,Speciality2
3 | Tim | 3 | Speciality2
6 | David | NULL | NULL
我尝试了以下查询:
SELECT d.id ,d.doctor_name, s.speciality_name, s.id
AS speciality_id
FROM api_doctors d
LEFT JOIN api_doctor_specialities ds
ON ds.doctor_id = d.id
LEFT JOIN api_specialities s
ON s.id = ds.speciality_id
GROUP BY d.id
但在这种情况下,我得到的是单一专业。
最佳答案
您正在寻找的是一个名为 GROUP_CONCAT 的 MySQL 函数,它返回一个连接的结果或 NULL。默认分隔符是逗号,因此该查询的结果应该与您想要的结果集相匹配。
SELECT d.id, d.doctor_name, GROUP_CONCAT(s.speciality_name) AS speciality_name, GROUP_CONCAT(s.id) AS speciality_id
FROM api_doctors d
LEFT JOIN api_doctor_specialities ds
ON ds.doctor_id = d.id
LEFT JOIN api_specialities s
ON s.id = ds.speciality_id
GROUP BY d.id
关于 SQL Fiddle 的架构和查询
关于php - MySQL:加入三个表并连接分组结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36587292/