明字被第一个%匹配了
这和正则表达式一样,
比如 '海明威'
%匹配了 '海明' ,
[^明]匹配了'威'
后面的%什么都没匹配
如果你有一个记录作者只有一个 '明' 字
那么第一个%匹配 '明'字 然后 [^明] 必须匹配一个字,不符合,这个记录会过滤
%匹配时候,是贪婪的,所以
第一次尝试会匹配所有,发现[^明]没有匹配的,
则放弃最后一个字符,继续匹配
所以,你这个like 语句只能去掉只有一个'明'的记录
select * from 表 where 图书编号 not in ( select 图书编号 from 表 where 作者 like '%明%')
好像 [^明] sql没识别吧! 并且这是用''号括起来的是不会执行判断的,放在外面会报错!
这种应该行不通
你的查询结果是全部是对的,以为%代表了包含部分,[^明]表示不包含明的部分
以海明威为例子,其实第一个%已经包含“海明”,而“威”字符合[^明]这个条件,所以是能查询出来的
你这样只能去除开头为“明”的记录:
你可以这样写啊,
select *
from 表
where not Exist (
select *
from 表
where 作者 like '%明%')