Oracle объединяет несколько и & или - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующий скрипт: -

SELECT
*
FROM
    view_pending_comm
WHERE
    (ok_to_gen = 'Y' AND comm_type = 'Maya' AND stage <> 3 OR stage <> 6 OR stage <> 9)
OR
    (ok_to_gen = 'Y' AND comm_type = 'Sapphire' AND stage <> 2) 

Что мне нужно сделать, это вернуть записи, где comm_type - это Maya, а не стадии 3, 6 или 9 а также где comm_type это Sapphire, но не этап 2. ok_to_gen должен быть Y во всех случаях.

Я пробовал скрипт выше, но он также возвращает записи, где comm_type - Sapphire, а stage - 2.

1 Ответ

0 голосов
/ 02 июля 2018

Использование not in:

SELECT *
FROM  view_pending_comm
WHERE (ok_to_gen = 'Y' AND comm_type = 'Maya' AND stage NOT IN (3, 6, 9)) OR
    (ok_to_gen = 'Y' AND comm_type = 'Sapphire' AND stage <> 2) 

Проблема заключается в логической проблеме соединения неравенств. Правильная логика:

stage = 3 or stage = 6 or stage = 9

Однако для отрицания используется and:

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