Dbeaver与Athena数据库使用Where Not Like未完全排除符合条件行问题
问题原因
这是典型的逻辑运算符使用错误,符合布尔逻辑中的德摩根定律应用场景:
- 你的需求是排除满足「
territory_name包含RG 或 包含WS」的所有行 - 等价于需要保留的行需要同时满足「
territory_name不包含RG 且 不包含WS」
你目前写的OR逻辑会导致只要满足其中一个否定条件就会被保留,比如某行包含RG但不包含WS,会命中NOT lower(td.territory_name) like '%ws%'的条件,最终被留在结果集里,完全不符合你的过滤要求。
正确写法
把条件中的OR替换为AND即可:
where NOT Lower(td.territory_name) like '%rg%' AND NOT lower(td.territory_name) like '%ws%'
也可以换更直观的写法,先圈定要排除的范围再取反,两种写法逻辑完全等价,执行效率无差异:
where NOT ( Lower(td.territory_name) like '%rg%' OR lower(td.territory_name) like '%ws%' )
内容的提问来源于stack exchange,提问作者Ethan Smih
相关产品推荐
相关产品推荐

