无外键关联情况下两表模糊查找匹配的SQL查询实现问题
问题原因
你原来的写法存在两处核心错误:
- 直接将子查询写在
LIKE的字符串参数中,数据库会将(select search from table b)识别为普通字符串,而非动态取B表的SEARCH值 - 子查询会返回多行结果,无法直接用在标量判断的IIF函数中
正确写法
推荐用关联查询实现模糊匹配,关联条件设置为A表的DESCRIPTION字段包含B表的SEARCH字段值即可,通用SQL写法如下:
SELECT a.AMOUNT AS Amount, b.Activity FROM 表A a LEFT JOIN 表B b ON a.DESCRIPTION LIKE CONCAT('%', b.SEARCH, '%');
如果你的数据库不支持CONCAT函数,可以改用对应数据库的字符串拼接符,比如Oracle、PostgreSQL可以写成:
SELECT a.AMOUNT AS Amount, b.Activity FROM 表A a LEFT JOIN 表B b ON a.DESCRIPTION LIKE '%' || b.SEARCH || '%';
注意事项
- 注意把SQL中的
表A、表B替换为你的实际表名 - 如果单条A表数据匹配到多条B表的SEARCH规则,会返回多条对应结果,可根据业务需要加
DISTINCT去重 - 用LEFT JOIN可以保留匹配不到SEARCH规则的A表数据,此时Activity字段会返回NULL,如果不需要这些数据可以换成INNER JOIN
内容的提问来源于stack exchange,提问作者Pak telo
相关产品推荐
相关产品推荐

