Оператор SQLВернуть строки, если выполняется одно или несколько условий - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу создать оператор SQL, который возвращает строки, если выполняется одно или несколько условий в предложении WHERE. Оператор SQL вы можете увидеть ниже. Проблема сейчас в том, что все условия должны быть выполнены. Если я заменю AND на OR, он все равно не будет работать, потому что тогда запрос не будет возвращать строки, в которых выполняются 2 или 3 условия. Я знаю, что могу решить это с СОЮЗОМ. Но это плохо для производительности. У кого-нибудь есть лучшее решение?

SELECT W*.
FROM WORK W JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE W.COLUMN1 IS NOT NULL
  AND (W.COLUMN2 IS NOT NULL AND W.COLUMN2 != -1)
  AND WS.WORKID != -1

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы могли бы упростить это.

SELECT W.*
FROM WORK W 
JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE (W.COLUMN1 IS NOT NULL OR W.COLUMN2 != -1 OR W.ID != -1)

Или обратный положительный.

SELECT W.*
FROM WORK W 
JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE NOT (W.COLUMN1 IS NULL AND W.COLUMN2 = -1 AND W.ID = -1)

Обратите внимание, что WHERE W.COLUMN2 != -1 не выберет W.COLUMN2, которые имеют значение NULL.
Так что WHERE (W.COLUMN2 IS NOT NULL AND W.COLUMN2 != -1) возвращает так же, как WHERE W.COLUMN2 != -1

0 голосов
/ 15 ноября 2018

Потому что вам требуется, если одно условие в условии where является истинным, чем возвращать все строки, поэтому есть только один вариант, чтобы вы использовали OR вместо AND ... Так попробуйте это:

SELECT W*.
FROM WORK W JOIN WORKSHOP WS ON W.ID = WS.WORKID
WHERE W.COLUMN1 IS NOT NULL
 OR (W.COLUMN2 IS NOT NULL AND W.COLUMN2 != -1)
 OR  WS.WORKID != -1
...