【问题标题】:Getting help in complicated query for mysql在复杂的 mysql 查询中获得帮助
【发布时间】:2012-01-18 23:40:44
【问题描述】:

拥有这个架构

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 个,因此出现错误,我必须确保该患者已访问所有医生,有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    为确保患者已就诊过所有医生,您可以将不同数量的医生 (license_no) 与在Visit 中按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 位不同的医生。

    当然,这是未经测试的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多