如何编写单条SQL查询实现从TABLE1中获取匹配TABLE2筛选条件的结果
问题原因
- 你使用
=匹配子查询结果,当子查询返回多条记录时会触发语法错误,本次你写的子查询会匹配到TABLE2中ID为1和2的两条记录,返回两个BRAVO,用=无法匹配多值结果 concat(C2)属于无效冗余操作,仅操作单个字段不需要调用拼接函数,直接使用C2即可
正确写法
方案1:IN子查询写法(逻辑更贴近你的原实现思路)
SELECT * FROM TABLE1 WHERE B1 IN (SELECT DISTINCT C1 FROM TABLE2 WHERE C2 LIKE '%NETW%');
说明:IN关键字支持匹配多个子查询返回值,加DISTINCT是避免TABLE2返回重复的C1值,降低匹配开销。
方案2:内连接写法(数据量较大时性能更优)
SELECT DISTINCT t1.* FROM TABLE1 t1 INNER JOIN TABLE2 t2 ON t1.B1 = t2.C1 WHERE t2.C2 LIKE '%NETW%';
说明:通过表关联直接过滤符合条件的记录,加DISTINCT是避免TABLE2有多条匹配记录时,TABLE1的结果行重复输出。
执行结果
最终会返回TABLE1中符合条件的行:
| ID | B1 | B2 | B3 |
|---|---|---|---|
| 2 | BRAVO | ASDF | OK |
内容的提问来源于stack exchange,提问作者BagZ
相关产品推荐
相关产品推荐

