如何基于Table C的两列有条件关联Table A、B并合并Value列?
直接用SQL实现中间表关联多表并合并结果列
完全可以用SQL直接实现,不用再转到R里处理。核心是利用COALESCE()函数合并关联后的两个Value列,避免生成两列的问题。
先回顾三张表结构:
Table A
| Id | Value |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
Table B
| Id | Value |
|---|---|
| 1 | 4 |
| 2 | 6 |
| 3 | 8 |
Table C(中间关联表)
| Key | Table_A_Id | Table_B_Id |
|---|---|---|
| 1 | 1 | NULL |
| 2 | NULL | 2 |
| 3 | 2 | NULL |
| 4 | NULL | 1 |
实现SQL语句
SELECT c.Key, COALESCE(a.Value, b.Value) AS Value FROM Table_C c LEFT JOIN Table_A a ON c.Table_A_Id = a.Id LEFT JOIN Table_B b ON c.Table_B_Id = b.Id ORDER BY c.Key;
逻辑说明
- 从中间表
Table_C出发,分别左关联Table_A和Table_B,关联条件对应各自的外键列 COALESCE()函数会依次读取传入的参数,返回第一个非NULL的值。由于Table_C中同一行的Table_A_Id和Table_B_Id互斥(一个非空则另一个必为NULL),这个函数刚好能精准取到对应表的Value值- 最后按
Key排序,就能得到目标结果:
| Key | Value |
|---|---|
| 1 | 10 |
| 2 | 6 |
| 3 | 20 |
| 4 | 4 |
内容的提问来源于stack exchange,提问作者Andrew Chastain
相关产品推荐
相关产品推荐

