我有以下 SQL 语句:
AND NOT (wo.ci_cnc_date IS NOT NULL AND p.prioid != '1 - Routine')
MSDN 声明“使用 NOT 否定表达式。”
如果这是真的,那么上述陈述是否等同于:
AND (wo.ci_cnc_date IS NULL AND p.prioid == '1 - Routine')
不,它相当于:
AND (wo.ci_cnc_date IS NULL OR p.prioid == '1 - Routine')
德摩根定律:否定合取和析取。维基
这相当于:
AND (NOT wo.ci_cnc_date IS NOT NULL OR p.prioid = '1 - Routine')
请注意,x IS NOT NULL
andx IS NULL
通常是不同的运算符,一个不是另一个的否定。
在PostgreSQL
, both(1, NULL) IS NULL
和(1, NULL) IS NOT NULL
yield FALSE
(见小提琴)