如何基于左表值选择右表多列之一高效实现LEFT JOIN?
问题:优化LEFT JOIN的优先级匹配逻辑
表结构与数据
Table A
| ID | Data |
|---|---|
| 1 | blahblahblah |
| 2 | yadayadayada |
| 3 | whatever |
Table B
| Primary_ID | Secondary_ID | More_Data |
|---|---|---|
| 1 | 3 | etc etc |
| 4 | 3 | doesn't matter |
预期连接逻辑与结果
连接逻辑:优先以A.ID匹配B.Primary_ID,若无匹配则匹配B.Secondary_ID
预期结果:
| A.ID | A.Data | B.Primary_ID | B.Secondary_ID | B.More_Data |
|---|---|---|---|---|
| 1 | blahblahblah | 1 | 3 | etc etc |
| 2 | yadayadayada | |||
| 3 | whatever | 4 | 3 | doesn't matter |
现有方案的问题
方案1:OR条件连接
SELECT * FROM A LEFT JOIN B ON A.ID = B.Primary_ID OR A.ID = B.Secondary_ID
数据量较大时,该查询效率极低。
方案2:两次JOIN+COALESCE合并
SELECT A.*, COALESCE(B1.Primary_ID, B2.Primary_ID), COALESCE(B1.Secondary_ID, B2.Secondary_ID), COALESCE(B1.More_Data, B2.More_Data) FROM A LEFT JOIN B B1 ON A.ID = B1.Primary_ID LEFT JOIN B B2 ON A.ID = B2.Secondary_ID
当前业务数据规模下,该方案不具备可持续性。
提问
是否存在无需使用UNION、连接条件中的OR子句或多次JOIN的实现方案?
内容的提问来源于stack exchange,提问作者hov
相关产品推荐
相关产品推荐

