2013-11-02 109 views
0

我需要編寫一個SQL查詢來獲取留在他們所住城市所有醫院的患者。在一個城市當然可能有幾家醫院。例如,如果住在華盛頓的病人'xxx'住在醫院裏,那麼只有當他在華盛頓州的所有醫院,並且不會少於這些醫院時,我才需要列出他。通過SQL查詢獲取符合所有條件的記錄

這是表的結構:

表病人

patientID 
    patientCity 

表醫院

hospitalCode 
    hospitalCity 

表hospital_stay

hospitalCode 
    patientID 
    cityStay 

什麼是最efficie NT的方式來做到這一點的MySQL?謝謝!

+1

我建議您先上傳你最大的努力。畢竟,這是**你的**作業,不是我們的。 –

+1

列cityStay的用途是什麼? – Bandydan

回答

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) 
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是那種說,病人到醫院一個標誌。

相關問題