MySQL中NOT关键字替代方案 如何改写SQL语句得到相同执行结果
改写后的SQL语句
你不需要使用JOIN即可实现需求,直接通过德摩根定律转换布尔逻辑即可,改写后的语句如下:
SELECT * FROM mytable WHERE col1 = 1 AND col1 <> col2 AND col3 <> 3;
转换逻辑说明
根据布尔代数的德摩根定律,NOT (A OR B) 的等价表达式为 NOT A AND NOT B,套用到你的原语句中即可完全去掉NOT关键字:
- 原括号内的
OR逻辑改为AND - 两个判断条件分别取反:
col1 = col2取反为col1 <> col2,col3 = 3取反为col3 <> 3
该改写结果和原语句的查询逻辑完全一致,包括NULL值的处理规则也完全对齐:如果涉及的字段存在NULL值,两种写法的判断结果都会返回UNKNOWN,不会被WHERE条件命中,无需额外适配。
内容的提问来源于stack exchange,提问作者Sound
相关产品推荐
相关产品推荐

