拥有这个架构
Doctor(licence_no, doctor_name, specialty)
Patient(pat_id, pat_name, pat_address, pat_phone, date_of_birth)
Visit(licence_no, pat_id, date, type, diagnosis, charge)
我想获取所有看过所有医生的患者的姓名 我是这样做的
SELECT p.pat_name FROM Patient p
INNER JOIN Visit v ON (v.pat_ID = p.pat_ID)
INNER JOIN Doctor d ON (d.licence_no = v.licence_no)
WHERE (SELECT d.licence_no FROM Doctor d) = (SELECT v.licence_no FROM Visit v2 WHERE
p.pat_ID =v.pat_ID)
但是出现错误,因为子查询返回超过 1 个值,我必须确保该患者已经看过所有医生,有什么建议吗?
最佳答案
为了确保患者已看过所有医生,您可以将不同的医生计数 (license_no
) 与按 pat_id 分组的
在license_no
计数进行比较访问
。
像这样的东西可以完成这项工作:
SELECT pat_name
FROM Patient p JOIN Visit v ON p.pat_id = v.pat_id
GROUP BY v.pat_id
HAVING COUNT(DISTINCT v.license_no) = (SELECT COUNT(license_no) FROM Doctor);
这里的想法只是验证,例如,如果Doctor
中有5位医生,则患者在Visit
中看过5位不同的医生。
这当然是未经测试的。
关于mysql - 获取 mysql 复杂查询的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483458/