我有以下脚本:-
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的记录。
答案 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