mysql - 获取 mysql 复杂查询的帮助

标签 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 个值,我必须确保该患者已经看过所有医生,有什么建议吗?

最佳答案

为了确保患者已看过所有医生,您可以将不同的医生计数 (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/

相关文章:

php - 是不是可以调用这个stmt fetch语句呢?

mysql - Plesk CLI 数据库 --create : This object can be created only in a subscription

sql server读取没有内部标签的xml

sql - 在 Where 子句中使用 MAX() 聚合的 Select 语句

python - 如何在Python中获取SQL Server的SYSTEM_USER

MySQL查询在非零列之间查找最大值

生成的结果集上的 MySQL 查询

sql - 将数据从一个表更新到另一个表(在数据库中)

sql - 如何在SQL Server中解析两个JSON?

sql - 找不到多部分标识符的错误