0

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

因此,例如,如果住在华盛顿的患者“xxx”曾在医院住院,那么我需要列出他只有在他去过华盛顿的所有医院且不少于的情况下才能列出他。

这是表的结构:

表病人

    patientID
    patientCity

餐桌医院

    hospitalCode
    hospitalCity

表 Hospital_stay

    hospitalCode
    patientID
    cityStay

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

4

2 回答 2

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如果是表示患者去医院的标志,请删除该评论。

于 2013-11-02T23:55:00.173 回答
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)
于 2013-11-03T01:35:16.513 回答