sql - SQL - 如何从多个表中为每个 ID 的每个列选择最佳可用值?
问题描述
我有两个表,它们具有相同的变量,指的是一个人的属性。
如何组合来自两个这样的表的数据,为每个字段的每个表中的每个列选择最佳可用值?
要求:
- 对于每个字段,我想用任一表中的值填充它,优先考虑表 1。
- 任一表中的值都可以为 NULL
- 在组合表中,第 1 列的值可能来自表 2(如果表 1 缺少该人的值),第 2 列的值可能来自表 1(因为两个表都有一个值,但来自表 1 是首选)。
- 在我的真实示例中,我有很多列,因此首选代码重复较少的优雅解决方案。
- 一些用户可能只存在于其中一张表中。
例子:
表格1:
user_id | age | income
1 | NULL| 58000
2 | 22 | 60000
4 | 19 | 35000
表 2:
user_id | age | income
1 | 55 | 55000
2 | 19 | NULL
3 | 22 | 33200
期望的输出:
user_id | age | income
1 | 55 | 58000
2 | 22 | 60000
3 | 22 | 33200
4 | 19 | 35000
解决方案
如果每个表中的 user_id 是唯一的,则使用完全外连接。
SELECT
COALESCE(t1.user_id, t2.user_id) AS user_id,
GREATEST(t1.age, t2.age) AS age,
GREATEST(t1.income, t2.income) AS income
FROM t1
FULL OUTER JOIN t2 ON t1.user_id = t2.user_id
推荐阅读
- sharepoint - Sharepoint - 从回收中删除项目
- sql - 标题在 csv 文件中生成问题
- javascript - 当有两个按钮时,如果用户在单击按钮 1-Javascript 或 html 之前尝试单击按钮 2,如何显示错误消息
- python - Pandas 脚本在计算机上工作 - 而不是在安全服务器上工作(“KeyError”)?
- javascript - 如何在javascript中增加鼠标指针区域?
- linux - Linux / Hadoop 集群的配置管理
- spring - Spring Boot 中的单例范围
- android - RecyclerView onClick 导致相同的活动?
- java - onActivityResult() 永远不会被调用
- javascript - 根据用户是否登录,有哪些方法可以显示不同的导航栏?