甲骨文合并多个和/或

时间:2018-07-02 11:35:25

标签: sql oracle

我有以下脚本:-

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而不是Stage 2的地方。在所有情况下,ok_to_gen都必须为Y。

我尝试了上面的脚本,但这还会返回comm_type为Sapphire且stage为2的记录。

1 个答案:

答案 0 :(得分:2)

使用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