我需要编写一个SQL查询来让患者住在他们居住的城市的所有医院。在一个城市当然可能有几家医院。
例如,如果居住在华盛顿的患者'xxx'已经住院,我只有在他住在华盛顿的所有医院时才需要列出他。
这是表格的结构:
表格患者 patientID
patientCity
表医院
hospitalCode
hospitalCity
table hospital_stay
hospitalCode
patientID
cityStay
为MySQL执行此操作的最有效方法是什么?谢谢!
答案 0 :(得分:1)
此查询应该有效:
Select p.patientID
, p.patientCity
from patient p
inner join hospital h on h.hospitalCity = p.patientCity
inner join hospital_stay hs on hs.hospitalCode = h.hospitalCode
--where hs.cityStay = 1
group by p.patientID, p.patientCity
having count(*) = (select count(*) from hospital
where hospitalCity = p.patientCity);
如果cityStay
是一个标志着患者去医院的标志,请删除评论。
答案 1 :(得分:1)
不幸的是,MySQL在分组之前无法订购,因此在分组之前我必须使用子查询来正确排序结果。
玩得开心:)
SELECT * FROM (
SELECT
p.patientID,
hs.hospitalCode
FROM
patient p
INNER JOIN hospital h ON (p.patientCity = h.hospitalCity)
LEFT JOIN hospital_stay hs ON (p.patientID = hs.patientID AND h.hospitalCode = hs.hospitalCode)
ORDER BY 2
) AS tmp_table
GROUP BY 1
HAVING NOT ISNULL(hospitalCode)