如何在SQL中用LIKE同时匹配两个值(避免OR误匹配)
解决指定列同时匹配多个关键词的SQL查询问题
嘿,我完全懂你遇到的困扰——用OR的话总会把只匹配单个关键词的行(比如你提到的ID为5的行)也捞出来,这显然不是你想要的结果。要实现同一列同时包含多个关键词的查询效果,其实有几种简单靠谱的方法:
方法一:多个LIKE搭配AND(最通用)
这是兼容性最好的方案,几乎所有数据库都支持。核心思路是用多个LIKE分别检查每个关键词的存在,再用AND确保所有条件同时满足。
举个例子,假设你的表叫your_table,要查询的列是target_column,需要同时包含"this"和"that":
SELECT * FROM your_table WHERE target_column LIKE '%this%' AND target_column LIKE '%that%';
这样写的话,只有当target_column里同时存在"this"和"that"两个关键词时,该行才会被返回,完美避开只匹配单个关键词的行。
方法二:正则表达式(适合复杂匹配)
如果你的数据库支持正则表达式(比如MySQL、PostgreSQL、SQL Server 2016+等),可以用正则来简化写法:
MySQL/MariaDB 示例
SELECT * FROM your_table WHERE target_column REGEXP '(?=.*this)(?=.*that)';
这个正则用正向预查,确保字符串里同时包含"this"和"that",顺序不影响。
PostgreSQL 示例
PostgreSQL的正则语法略有不同,需要用~操作符:
SELECT * FROM your_table WHERE target_column ~ '(?=.*this)(?=.*that)';
如果需要忽略大小写,可以用~*代替~。
为什么OR会出问题?
简单说,OR是逻辑或,只要满足任意一个条件就会返回结果。比如ID为5的行如果只包含"this",那它会匹配LIKE '%this%',自然会被OR语句选中。而AND是逻辑与,必须所有条件都满足才会返回,刚好命中你要的“同时包含多个关键词”的需求。
内容的提问来源于stack exchange,提问作者A. Pecora
相关产品推荐
相关产品推荐

