2011-12-18 179 views
1

我想從病人表中選擇所有的女性患者,其中由病名 面積=朝南或面積=向西,然後組的結果所以我不得不寫在那裏的條件是這樣的:SQL語句條件

command10.CommandText = "SELECT D.DiseaseName, COUNT(D.Patient_ID) AS PNO FROM PatientAffectDisease D INNER JOIN patient P on D.Patient_ID = P.Patient_ID WHERE P.Gender='" & "female" & "'" & " AND P.Area='" & "south" & " '" & "OR P.Area='" & "west" & " '" & " GROUP BY DiseaseName " 

但是這不會返回正確的結果。

任何想法?

+0

是大小寫敏感的在你的數據庫是否已開啓?如果是這樣的話,你可能需要處理所有的事情,以獲得所需的匹配(當你想要使用索引時,它會真的很糟糕) – xQbert 2011-12-18 01:49:50

回答

1

在您的OR'd條件的周圍放置括號

例如,

WHERE P.Gender ='」 & 「女性」 & 「 '」 & 「和 (P.Area ='」 & 「南」 & 「 '」 & 「OR P.Area ='」 &「西「&」「 「&」)

或只使用IN子句... 其中p.gender = '女' 和p.area在( '南', '西')

+0

非常感謝你 – user1082487 2011-12-18 01:55:06

1

問題是否在南碼和西碼之後使用此代碼還有額外的空格:" '"

您試圖找到'south'或'west',而不是'south'或'west'。

您也可以修改此條件以使用IN子句。

command10.CommandText = "SELECT D.DiseaseName, COUNT(1) AS PNO FROM PatientAffectDisease D INNER JOIN patient P on D.Patient_ID = P.Patient_ID WHERE P.Gender='female' AND P.Area IN ('south', 'west') GROUP BY DiseaseName" 
1

我認爲問題在於你的where子句中沒有使用括號。

command10.CommandText = 
"SELECT D.DiseaseName, COUNT(D.Patient_ID) AS PNO " & _ 
" FROM PatientAffectDisease D " & _ 
" INNER JOIN patient P on D.Patient_ID = P.Patient_ID " & _ 
" WHERE P.Gender='female' AND P.Area in ('south','west') " _ 
" GROUP BY DiseaseName " 
1

您發佈的查詢無法正常工作的原因是您在生成的查詢中'west'和'south'之後有額外的空間。

您應該始終將您的邏輯與()分組,以便更易於維護和理解代碼 - 並遠離此類錯誤。

AND結合比OR更難,所以你早些時候曾是一樣的書寫:

(P.Gender = 'female' AND P.Area = 'west') OR P.Area = 'south' -- not correct 

而不是使用P.Area = 'west' OR P.Area = 'south'可以使用IN運算符,如下面的例子:

SELECT  D.DiseaseName, COUNT(D.Patient_ID) AS PNO 
FROM  PatientAffectDisease D 
INNER JOIN patient P ON D.Patient_ID = P.Patient_ID 
WHERE  P.Gender = 'female' AND P.Area IN ('west','south') 
GROUP BY D.DiseaseName 

command10.CommandText = "SELECT D.DiseaseName, COUNT(D.Patient_ID) AS PNO FROM PatientAffectDisease D INNER JOIN patient P ON D.Patient_ID = P.Patient_ID WHERE P.Gender = 'female' AND P.Area IN ('west','south') GROUP BY D.DiseaseName" 
1

這是你查詢的文本:

SELECT 
    D.DiseaseName, 
    COUNT(D.Patient_ID) AS PNO 
FROM PatientAffectDisease D 
    INNER JOIN patient P on D.Patient_ID = P.Patient_ID 
WHERE P.Gender='female' 
    AND P.Area='south ' 
    OR P.Area='west ' 
GROUP BY DiseaseName 

在SQL中,AND自然has precendence overOR

所以你實際詢問

WHERE (P.Gender='female' AND P.Area='south') OR (p.Area = 'west') 

必須使用括號明確聲明優先需要

WHERE P.Gender='female' AND (P.Area='south' OR p.Area='west') 
+0

+1格式良好的答案比其他答案要好。 – Lion 2011-12-18 02:00:45

+0

@獅子你是說我的帖子格式不正確? :O;) – 2011-12-18 02:02:46

+0

@refp :)沒有,這根本不意味着。我也投了所有的答案。 – Lion 2011-12-18 02:11:06