获取有关mysql的复杂查询的帮助

时间:2011-12-13 01:57:32

标签: mysql sql sql-server sql-server-2008

拥有这个架构

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而出现错误,我必须确保该病人已经访问过所有医生,是否有任何建议?

1 个答案:

答案 0 :(得分:3)

为了确保患者访问了所有医生,您可以将不同的医生数量license_no)与license_no的{​​{1}}计数进行比较pat_id }。

这样的事可能会起到作用:

Visit

这里的想法仅仅是验证如果有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); 中的5位医生,患者已经访问了Doctor中的5位不同的医生。

当然,这是未经测试的。