2015-07-30 3 views
0

У меня есть оператор SQL, который должен возвращать строки, если они принадлежат определенному пользователю, и до тех пор, пока их условие 1 не равно 1 ИЛИ условие2 не равно 1. Но когда я выполняю его с условием 1 или условием2 только 1 - строка все еще возвращается. Я пытаюсь сделать так, если condition1 ИЛИ condition2 или оба 1, то не возвращают такие строки, но по какой-то причине она работает только тогда, когда оба условия = 1SQL WHERE (условия) И (условие1 ИЛИ условие2) не работает

Select * FROM table1 
WHERE table1.user = $user 
AND (condition1 = 0 OR condition2 = 0) 

ответ

3

Ваши требования противоречивы. Вот некоторые решения для каждого из них:

принадлежит определенному пользователю и до тех пор, как их condition1 не 1 ИЛИ condition2 не 1

Если condition1 и condition2 не обнуляемые:

Select * FROM table1 
WHERE table1.user = $user 
AND (condition1 <> 1 OR condition2 <> 1) 

Если они:

Select * FROM table1 
WHERE table1.user = $user 
AND (condition1 <> 1 OR condition2 <> 1 
    OR condition1 IS NULL OR condition2 IS NULL) 

если condition1 ИЛИ condition2 или оба 1, то не возвращают

Не обнуляемым:

Select * FROM table1 
WHERE table1.user = $user 
AND condition1 <> 1 AND condition2 <> 1 

Nullable:

Select * FROM table1 
WHERE table1.user = $user 
AND ((condition1 <> 1 OR condition1 IS NULL) 
    AND (condition2 <> 1 OR condition2 IS NULL)) 
+0

condit ion1 <> 1 ** AND ** состояние2 <> 1 работал. Спасибо, я отвечу в 5 минут. – BaddieProgrammer

+2

Не видел ваш ответ перед публикацией; удалил мой и поддержал это. – mwigdahl

1

Вы получили вашу логику немного назад, попробуйте это:

Select * FROM table1 
WHERE table1.user = $user 
AND NOT (condition1 = 0 OR condition2 = 0) 
Смежные вопросы