sql - 连接来自不同表的公共列并选择第一个填充最多的列
问题描述
我有三个表: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
解决方案
我认为你想要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
推荐阅读
- tensorflow - 使用 float16 的 TensorFlow 2.2 仅在 CPU 上执行
- c# - C# 控制台:您能否在与项目相同的文件夹中找到 .wav 文件
- karate - 在 KarateDSL 中,如何从服务响应(一种键值响应)中获取键?
- r - 如何计算R中距离矩阵的加权平均值和标准差
- python - 如何在烧瓶管理中隐藏“列表”视图?
- javascript - 如何从 chrome 的缓存中加载画布中的图像?
- php - 在请求 sql 中获取同名的行
- systemc - 是否有更好/替代方法来实现 SystemC 模块中的延迟
- python - 在python中打开json文件
- javascript - Vue.js 示例项目消息未更新