2015-09-17 2 views
1
SELECT 
    * 
FROM 
    TableName 
WHERE 
    Column1 = 'X' 
    AND Column2 = 'Y' 
    AND (Column3 != 'D' AND Column4 != 'D') -- Want to apply this filter ONLY if both conditions are true 

Как записать третий фильтр так, чтобы он применялся, только если оба они являются истинными. В настоящее время, скобки не делают никакой разницы, но мне нужно выражение в скобках следует рассматривать как одно условиеSQL, где оба условия заключены в скобки:

Пример:

Column1  Column2  Column3  Column4 
X   Y   D   L 
X   Y   L   L 
X   Y   L   D 
X   Y   D   D -- want to remove this line 

Результат должен быть:

Column1  Column2  Column3  Column4 
X   Y   D   L 
X   Y   L   L 
X   Y   L   D 
+0

Вы уже сделали. – jarlh

+0

Вы просто удалите AND (Column3! = 'D' AND Column4! = 'D') ... – daniel

+0

проверьте обновление, чтобы вы поняли, в чем проблема. –

ответ

2
SELECT 
    * 
FROM 
    TableName 
WHERE 
    Column1 = 'X' 
    AND Column2 = 'Y' 
    AND NOT (Column3 = 'D' AND Column4 = 'D') 
+0

Как это включить строки, где Column1 <> 'X' или Column2 <> 'Y'? –

+0

Это то, что я искал! –

+0

@ile: Но это не тот запрос, о котором вы просили. Вы хотели применить третье условие только в том случае, если первые два являются уже истинными. Это означает, что вы хотите также записывать, где 'Column1 <> 'X'' или' Column2 <>' Y''. Этот запрос [не принимает его во внимание] (http://www.sqlfiddle.com/#!6/4f2e3/1/0) (последние две строки не включены). Так что это неправильно или ваш вопрос. –

1

Вам нужен OR:

SELECT 
    * 
FROM 
    TableName 
WHERE 
    (Column1 <> 'X' OR Column2 <> 'Y') 
OR 
    (Column1 = 'X' AND Column2 = 'Y' AND (Column3 != 'D' AND Column4 != 'D')) 

Боковое примечание: ваш ожидаемый результат неправильный или ваш код. This - результат с вашими кодами. Я думаю, вы хотите Column3 != 'D' OR Column4 != 'D' вместо Column3 != 'D' AND Column4 != 'D'.

Тогда это более уместно и возвращает свой ожидаемый результат:

SELECT 
    * 
FROM 
    TableName 
WHERE 
    (Column1 <> 'X' OR Column2 <> 'Y') 
OR 
    (Column1 = 'X' AND Column2 = 'Y' AND (Column3 != 'D' OR Column4 != 'D')) 

Demo

+0

Я боялся, что мне придется это делать ... Проблема в том, что мой запрос в реальном мире имеет огромный список фильтров, поэтому мне пришлось бы повторять их в обоих статьях. –

+0

На самом деле не уверен, что это будет работать, потому что мой список других фильтров очень большой, поэтому мне пришлось бы повторить все из них –

+0

@ile: обратите внимание, что я отредактировал свой ответ. –

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