2011-12-18 3 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

ответ

1

Put Скобки вокруг OR-нут условия

например

WHERE P.Gender =»& "женский" &" '& "И (P.Area =' & "Юг" & " '" &" ИЛИ P.Area =' & "запад "&" «&")

или просто использовать в операторе ... где p.gender = 'женский' и p.area в ('юг', 'запад')

+0

Большое вам спасибо – user1082487

1

Этот вопрос что у вас были дополнительные пробелы после юга и запада с помощью этого кода: " '"

Вы пытались найти «юг» или «запад», а не «юг» или «запад».

Вы также можете изменить это условие, чтобы использовать предложение 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

Причина Опубликованная запрос не работает должным образом, потому что у вас есть дополнительное пространство после «запада» и «юга» в сформированном запросе.

Вы должны всегда группировать свою логику с помощью (), чтобы было проще поддерживать и понимать код - и избегать ошибок, таких как этот.

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

+0

@ Lion вы говорите, что мои сообщения плохо отформатированы? : O;) –

+0

@refp :) Нет, это совсем не значит. Я просто проголосовал за все ответы. – Lion