SQL查询条件:返回Closed为NULL或NFA为TRUE,排除两者同时为真
解决SQL查询条件问题
首先,SQL的WHERE子句里没有else语法,你需要用逻辑运算符(AND/OR/NOT)组合条件来实现需求。
根据你的描述,需求是:返回Closed为NULL的行,或者NFA为TRUE的行,但要排除Closed不为NULL且NFA为TRUE的行。
拆解后,最终的有效条件可以用两种等价方式写:
写法一:明确组合逻辑
WHERE (Closed IS NULL OR tblDataDetail.ddt_nfa = TRUE) AND NOT (Closed IS NOT NULL AND tblDataDetail.ddt_nfa = TRUE)
写法二:简化后的等价条件
仔细推导会发现,上面的逻辑其实等价于只保留Closed为NULL的行(因为NFA为TRUE且Closed不为NULL的情况被排除后,剩下的NFA为TRUE的行都属于Closed为NULL的范畴),所以可以直接写:
WHERE Closed IS NULL
如果你的真实需求是排除所有Closed不为NULL且NFA为TRUE的行(即允许Closed为NULL的所有行,以及Closed不为NULL但NFA为FALSE的行),那正确的条件是:
WHERE Closed IS NULL OR tblDataDetail.ddt_nfa = FALSE
或者更简洁的版本:
WHERE NOT (Closed IS NOT NULL AND tblDataDetail.ddt_nfa = TRUE)
内容的提问来源于stack exchange,提问作者Parkyjax
相关产品推荐
相关产品推荐

