如何通过拼接字段单条SQL实现TableA与TableB两表关联查询
解决方案
核心思路
利用关联条件匹配两种compCode的生成规则,即可单条SQL完成关联查询,不需要拆分多次查询。
通用实现方案
直接在关联条件中用OR覆盖本土、海外员工两种编码规则:
SELECT b.id, b.compCode, b.EmpName, a.CompName FROM TableB b INNER JOIN TableA a ON b.compCode = a.companyCode OR b.compCode = CONCAT(a.AbroadCode, a.companyCode);
注:如果使用Oracle等数据库,字符串拼接语法可替换为
b.compCode = a.AbroadCode || a.companyCode
高性能优化方案
如果数据量较大,OR条件可能导致索引失效,可以用UNION ALL合并查询逻辑,性能更稳定,和你原先拆分两条查询的逻辑完全一致:
-- 匹配本土员工(compCode直接为companyCode) SELECT b.id, b.compCode, b.EmpName, a.CompName FROM TableB b INNER JOIN TableA a ON b.compCode = a.companyCode UNION ALL -- 匹配海外员工(compCode为AbroadCode拼接companyCode) SELECT b.id, b.compCode, b.EmpName, a.CompName FROM TableB b INNER JOIN TableA a ON b.compCode = CONCAT(a.AbroadCode, a.companyCode) ORDER BY id;
内容的提问来源于stack exchange,提问作者ruedi
相关产品推荐
相关产品推荐

