2015-10-18 3 views
2

В моей базе данных MS SQL 2012 «Доктора» У меня есть таблица «кандидатов» со следующими полями:Каков правильный способ построения этого запроса?

Id, name, email, specification, sub specification, work state, geo preferences.

Я пытался сделать запрос как:

SELECT from candidates 
WHERE specification = 6, AND sub specification = 148, 
AND geo preferences IN ('Main';'New York';'Vermont'); 
OR work state IN ('Main';'New York';'Vermont');` 

Я не могу заставить его работать так, как это должно быть. Если я опустил условие «рабочее состояние», он работает нормально. Но после добавления его снова результаты дают мне неправильные спецификации и номера вспомогательных спецификаций.

Не могли бы вы помочь мне решить эту проблему?

+0

Ну, в списке должен быть, как разделитель, не должно быть; перед или, государство называется Мэн и, как @Mureinik сказал, что вы должны добавить(), чтобы исправить логику. –

ответ

0

and имеет более высокий приоритет, чем or, поэтому ваш запрос будет интерпретироваться как:

SELECT * 
FROM candidates 
WHERE (specification = 6 AND 
     sub_specification = 148 AND 
     geo_preferences IN ('Main', 'New York', 'Vermont')) OR 
     work state IN ('Main', 'New York', 'Vermont') 

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

SELECT * 
FROM candidates 
WHERE specification = 6 AND 
     sub_specification = 148 AND 
     (geo_preferences IN ('Main', 'New York', 'Vermont') OR 
     work state IN ('Main', 'New York', 'Vermont')) 
+0

Спасибо вам большое. Теперь он отлично работает. – corver40

Смежные вопросы