SQL多条件LIKE排除查询报错SQL0104,求解决方案
解决SQL0104错误并实现需求的正确写法
嘿,我来帮你搞定这个SQL错误!你遇到的SQL0104报错,主要是两个问题导致的:一是语法用错了,二是逻辑运算符的优先级没处理好,刚好对应你要实现的查询需求。
先说说错误根源
- 你用了
<>和LIKE组合,这在SQL里是不合法的!要表示“不匹配某类模式”,得用NOT LIKE,而不是<>搭配LIKE - 原查询里的
OR会搞乱逻辑:因为SQL中AND的优先级比OR高,你的原语句会被解析成(juultp = 1 AND jutx40 <> LIKE 'M3%') OR jutx40 <> LIKE 'MeC%',这完全不是你想要的“juultp=1 同时 不以M3/MeC开头”的逻辑
给你两种正确的写法
写法一:用多个AND串联条件(最直观)
直接把每个“不以XX开头”的条件用NOT LIKE写出来,再和juultp=1用AND关联:
SELECT * FROM m3fdbprd.cmnusr WHERE juultp = 1 AND jutx40 NOT LIKE 'M3%' AND jutx40 NOT LIKE 'MeC%' ORDER BY jutx40;
写法二:用NOT包裹OR条件(逻辑上等价)
如果觉得多个NOT LIKE有点啰嗦,也可以把“以M3开头 或者 以MeC开头”的条件用OR组合,再整体用NOT否定,这样逻辑更紧凑:
SELECT * FROM m3fdbprd.cmnusr WHERE juultp = 1 AND NOT (jutx40 LIKE 'M3%' OR jutx40 LIKE 'MeC%') ORDER BY jutx40;
这两种写法都能正确筛选出你需要的数据,而且不会再触发SQL0104的语法错误啦!
内容的提问来源于stack exchange,提问作者George H
相关产品推荐
相关产品推荐

