2016-09-03 36 views
0

我試圖找到一個既失眠又流感的人。如何讓一個有多種疾病的人

,我到目前爲止已經試過的代碼是:

SELECT Patient.patientName, Patient.patientPNbr 
FROM Patient 
LEFT JOIN SuffersFrom 
ON Patient.patientPNbr = SuffersFrom.patientPNbr 
WHERE diseaseName = 'Insomnia' 
AND diseaseName = 'Influenza' 

你會如何着手找人?

+0

退房「集團通過」和「具有」關鍵字... – MrTux

+0

您正在使用哪個數據庫? 。因爲你的SQL看起來很好 – Abhishek

+2

只要進入候診室尋找打噴嚏的疲倦者 –

回答

3

如果想回到病人誰擁有這兩種疾病

SELECT Patient.patientName, Patient.patientPNbr 
FROM Patient 
INNER JOIN SuffersFrom ON Patient.patientPNbr = SuffersFrom.patientPNbr 
WHERE diseaseName IN ('Insomnia','Influenza') 
GROUP BY Patient.patientName, Patient.patientPNbr 
HAVING COUNT(diseaseName)>1 
+0

一個潛在的問題這是因爲如果SuffersFrom表中有兩個失眠症(或兩個流感),那麼這也會返回一個結果。 – GavinCattell

+0

然後你可以在COUNT中使用DISTINCT作爲'HAVING COUNT(DISTINCT diseaseName)> 1' – Susang

0

您需要多次使用SuffersFrom(每種疾病檢查一次)。我會使用EXISTS子句。

SELECT SELECT Patient.patientName, Patient.patientPNbr 
FROM Patient 
--Check for Insomnia 
WHERE EXISTS (SELECT 1 
    FROM SuffersFrom 
    WHERE Patient.patientPNbr = SuffersFrom.patientPNbr 
    AND diseaseName = 'Insomnia') 
--Check for Influenza 
AND EXISTS (SELECT 1 
    FROM SuffersFrom 
    WHERE Patient.patientPNbr = SuffersFrom.patientPNbr 
    AND diseaseName = 'Influenza') 
0

使用下面的查詢與連接嘗試......

 SELECT P.patientName, P.patientPNbr 
     FROM Patient p 
      INNER JOIN SuffersFrom s 
        ON p.patientPNbr = s.patientPNbr 
      INNER JOIN SuffersFrom s1 
        ON s.patientPNbr = s1.patientPNbr 
     WHERE s.diseaseName = 'Insomnia' 
       AND s1.diseaseName = 'Influenza'