SQL заявление условия - PullRequest
       4

SQL заявление условия

1 голос
/ 18 декабря 2011

Я хочу выбрать всех пациентов женского пола из таблицы пациентов, где область = юг или область = запад, а затем сгруппировать результат по названию болезни. Поэтому мне пришлось написать условие 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='" & "south" & " '" & "OR P.Area='" & "west" & " '" & " GROUP BY DiseaseName "

Но это не дает правильного результата.

Есть идеи?

Ответы [ 5 ]

1 голос
/ 18 декабря 2011

Вот текст вашего запроса:

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 естественно имеет приоритет над OR.

Так что выВы фактически спрашиваете

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

Вы должны использовать скобки, чтобы явно указать приоритет, который вам нужен

 WHERE P.Gender='female' AND (P.Area='south' OR p.Area='west')
1 голос
/ 18 декабря 2011

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

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

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 голос
/ 18 декабря 2011

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

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

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

Я думаю, что проблема в вашем предложении 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 голос
/ 18 декабря 2011

Поставьте круглые скобки вокруг условий OR'd

, например

ГДЕ P.Gender = '"&" female "&"' "&" AND (P.Area = '"&" south "&"' "&" OR P.Area = '"&" west "&"' "&")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...