Oracle中带条件LEFT JOIN写法求助:关联两表获取指定结果
Oracle SQL 动态关联查询实现方案
可以通过两种方式实现你的需求,根据实际场景选择即可:
方法一:UNION ALL 拆分场景
这种方式逻辑直观,便于维护,且能更好利用表B对应列的索引:
SELECT A.name, B.level6 FROM A JOIN B ON A.level = B.level4 WHERE A.level = 4 UNION ALL SELECT A.name, B.level6 FROM A JOIN B ON A.level = B.level5 WHERE A.level = 5;
方法二:CASE 条件关联
如果希望用单查询语句实现,可在JOIN条件中使用CASE逻辑:
SELECT A.name, B.level6 FROM A JOIN B ON CASE A.level WHEN 4 THEN B.level4 WHEN 5 THEN B.level5 END = A.level WHERE A.level IN (4, 5);
说明
- 假设表A中存在
name='AAA'且level分别为4和5的两条记录,表B中对应level4=4时level6=46、level5=5时level6=56,执行上述任一语句都将得到预期结果:AAA 46 AAA 56
内容的提问来源于stack exchange,提问作者shenhengbin
相关产品推荐
相关产品推荐

