SQL查询问题:如何精准排除Store以DD结尾且Code为101/103的记录?
正确过滤Store和Code组合条件的SQL修改方案
原始数据
| Store | Code |
|---|---|
| Store1.DD | 101 |
| Store2.DE | 103 |
| Store2.DD | 103 |
| Store1.DD | 105 |
| Store2.DD | 107 |
需求
排除所有Store以"DD"结尾且Code为101或103的记录,保留其余数据。
错误的SQL语句
Select * from table where Store not like '%DD' and Code not in ('101,'103')
注:原语句还有语法错误——
IN列表里的'101,'多了个逗号,正确格式应为('101', '103')
原语句的核心逻辑错误:用and连接两个否定条件,导致只要Store以DD结尾或者Code是101/103的记录都会被排除,完全偏离了需求——我们只需要排除同时满足Store以DD结尾且Code为101/103的记录。
正确的SQL写法
写法一:直接否定要排除的组合条件
SELECT * FROM table WHERE NOT (Store LIKE '%DD' AND Code IN ('101', '103'))
写法二:利用德摩根定律拆分逻辑(与写法一等价)
SELECT * FROM table WHERE Store NOT LIKE '%DD' OR Code NOT IN ('101', '103')
预期结果
| Store | Code |
|---|---|
| Store2.DE | 103 |
| Store1.DD | 105 |
| Store2.DD | 107 |
内容的提问来源于stack exchange,提问作者Sam332
相关产品推荐
相关产品推荐

