SQL查询以获取符合所有条件的记录

时间:2013-11-02 23:06:51

标签: mysql sql

我需要编写一个SQL查询来让患者住在他们居住的城市的所有医院。在一个城市当然可能有几家医院。

例如,如果居住在华盛顿的患者'xxx'已经住院,我只有在他住在华盛顿的所有医院时才需要列出他。

这是表格的结构:

表格患者

    patientID
    patientCity
表医院

    hospitalCode
    hospitalCity

table hospital_stay

    hospitalCode
    patientID
    cityStay

为MySQL执行此操作的最有效方法是什么?谢谢!

2 个答案:

答案 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)