MySQL如何在多列中使用通配符匹配指定字符串实现模糊查询
问题原因
IN 运算符仅支持精确值匹配,本身不识别 % 通配符,你尝试的写法本质是判断三个字段的值是否有完全等于字符串 %Alex% 的,自然无法返回符合模糊匹配要求的结果。
解决方案
方案1:多条件OR拼接(全数据库兼容)
直接为每个需要匹配的字段单独写 LIKE 条件,用OR关联即可,兼容所有主流SQL数据库:
SELECT * FROM `teachers` WHERE teacherfname LIKE '%Alex%' OR teacherlname LIKE '%Alex%' OR salary LIKE '%Alex%';
注:salary为数值类型,执行
LIKE匹配时会自动转为字符串处理,不影响匹配结果。
方案2:字段拼接后匹配(适合MySQL场景)
如果使用的是MySQL数据库,可以用 CONCAT_WS 函数把三个字段拼接后统一匹配,写法更简洁,列数较多时优势更明显:
SELECT * FROM `teachers` WHERE CONCAT_WS('|', teacherfname, teacherlname, salary) LIKE '%Alex%';
注:拼接时加入自定义分隔符
|是为了避免相邻字段内容拼接后意外命中搜索词,出现误匹配的问题。
性能提示
这种前后都加%的全模糊匹配无法用到普通B-tree索引,数据量较大时查询性能会比较差,如果有高频这类查询需求,建议建立全文索引优化。
内容的提问来源于stack exchange,提问作者llo
相关产品推荐
相关产品推荐

