首页 > 解决方案 > 连接来自不同表的公共列并选择第一个填充最多的列

问题描述

我有三个表:A、B 和 C。B 和 C 中的记录包含可以为空的列 data1 和 data2,以及 id_A。

我需要为 A 中的每条记录(A 中的所有列)接收 data1 和 data2 的任何数据。

表 A(其他列省略):

id
1
2
3
4
5

表 B:

id | id_A | data1 | data2
1    1      b11     null
2    1      null    b12
3    2      null    b22
4    5      b51     null

表 C:

id | id_A | data1 | data2
1    1      c11     c12
2    2      c21     null
3    3      c31     null
4    5      c51     null

结果:

id | data1 | data2
1    b11     b12
2    c21     b22
3    c31     null
4    null    null
5    b51     null

标签: sqlsqlite

解决方案


我认为你想要left join和聚合:

select a.id, coalesce(max(b.data1), max(c.data1)) as data1,
       coalesce(max(b.data2), max(c.data2)) as data2
from a left join
     b
     on a.id = b.id_a left join
     c
     on a.id = c.id_a
group by a.id

推荐阅读