SQL NOT LIKE运算符功能异常求助:部分NT开头样本未被过滤
解决SQL中NOT LIKE运算符过滤不完整的问题
嘿,这问题我太熟了——根源就是逻辑运算符的优先级在捣乱!
你写的WHERE子句里,AND的优先级比OR高,所以数据库实际执行的逻辑是这样的:
先匹配
full.full_id IN ('567', '686') AND random.sample_name NOT LIKE ('NT%')这部分,然后再把结果和full.full_id IN ('272', '273')的记录做OR合并。
这就导致full_id是272或273的那些记录,不管sample_name是不是以NT开头,都会被直接包含到结果里,这就是为什么还有一部分NT开头的样本没被过滤掉。而你用LIKE 'NT%'能查到所有,说明数据本身是没问题的,就是逻辑分组错了。
修正的方法很简单,给OR两边的条件加上括号,明确让数据库先执行OR的分组,再去做AND的过滤:
WHERE (full.full_id IN ('272', '273') OR full.full_id IN ('567', '686')) AND random.sample_name NOT LIKE ('NT%')
其实你还可以简化一下IN的写法,把所有full_id放到同一个IN列表里,逻辑更清晰:
WHERE full.full_id IN ('272', '273', '567', '686') AND random.sample_name NOT LIKE ('NT%')
这样修改后,就能先筛选出指定full_id的所有记录,再从中排除掉sample_name以NT开头的,正好符合你的需求~
内容的提问来源于stack exchange,提问作者nsinghphd
相关产品推荐
相关产品推荐

