数据库多表模糊查询

错误!这会导致查询结果重复。

正确做法:使用子查询或临时表,如下:
sql SELECT arttitle FROM t1 WHERE arttitle LIKE '%abc%' UNION SELECT arttitle FROM t2 WHERE arttitle LIKE '%abc%' UNION SELECT arttitle FROM t3 WHERE arttitle LIKE '%abc%' UNION SELECT arttitle FROM t4 WHERE arttitle LIKE '%abc%';

sql语句中怎么实现in中的模糊查询

说实话,用SQL搞模糊查询那会儿我刚入行,踩了不少坑。
记得第一次给客户写需求文档,老板说要在型号里找"2 4 W"开头的电池,我当时手一抖就写成了LIKE '2 4 W%',结果客户反馈跑半天没结果。
后来我才知道,这货得在数据库管理工具里点对点调试——比如在我用过的那个老版本的SQL Server Management Studio里,先选中CK_ATE表,再调出查询编辑器,那才叫一个折腾。

有意思的是,LIKE这玩意儿特别依赖百分号 % 的位置。
上次帮设备部找"R-FA1 "结尾的型号,有个哥们儿写成LIKE '%R-FA1 ',结果系统直接把所有型号都翻了一遍。
我赶紧拍他肩膀说"得加个-,像LIKE '%-R-FA1 '",他愣了几秒,说"哦,原来是这样"。
当时我就觉得,这帮技术民工,真是个字一个字抠出来的。

模糊查询慢这事儿,我是真领教过。
有回夜查系统日志,发现半夜3 点居然有台服务器因为LIKE '%故障%'把CPU飙到9 0%,后来一查,是运维老王在临时表里跑这个查询,结果把整个生产库拖慢了。
说实话,当时我气得想给他写封内部邮件吐槽,但转念一想,老王那性格,邮件发出去估计连他自己都忘了。

不过现在用现代数据库,比如Azure SQL或者PostgreSQL,他们内置了全文索引,查"2 4 W"开头的能快到让你怀疑人生。
我上次在PostgreSQL上试了ILIKE '2 4 w%'(大小写不敏感),结果比以前快了快了——当然,前提是得先建个全文索引,这点得提醒新手,别光知道用LIKE。

数据量大的话,加TOP 1 0确实是救星。
我有个客户公司,搞一个"电池型号推荐系统",结果用户一搜"锂电池",整个CK_ATE表被扫得滋滋响。
后来我们改成了先分大类,比如"磷酸铁锂电池"下面再搜"2 4 W",这才把响应时间控制在3 秒以内。
说白了,数据库不是无脑堆数据,得有策略。

这块我没亲自跑过,但听说Oracle里还有个INSTR函数也能做类似查询,不过我更习惯用LIKE,毕竟LIKE支持通配符多,比如LIKE '%2 4 W-%'还能查"2 4 W"中间带个破折号的型号。
数据我记得是X左右,但建议你核实下你用的数据库版本,比如MySQL 8 .0跟老版本的写法可能还差个ESCAPE啥的。