sql - 如何通过同时运行左外连接和右外连接来合并数据框中的两列
问题描述
我有两个表,每个表有 2 列,一个 id 列和一个收入列。我已经使用完全外连接连接了两个表,执行以下操作:
val income = incomeA.join(incomeB, incomeA("idA") === incomeB("idB"), "full")
产生以下集合:
+--------------------+----------+--------------------+----------+
| idA | A_INCOME| idB | B_INCOME|
+--------------------+----------+--------------------+----------+
|0d4f671c-552b-449...| 2250| null| null|
|9e03f92e-af0e-416...| 1250| null| null|
| null| null|c75d0d17-f3c1-497...| 4300|
|02572d79-bc54-427...| 2880| null| null|
| null| null|ca493eca-0709-4db...| 2320|
|cb7831ac-2550-435...| 1650| null| null|
|da7ac4c4-403b-466...| 2250| null| null|
|9bddb7b5-0047-4e1...| 5170| null| null|
| null| null|b54fc648-5f00-411...| 800|
|7aeade0a-47d4-459...| 4250| null| null|
|4fde8deb-a7de-45a...| 1650| null| null|
+--------------------+----------+--------------------+----------+
但我希望最终结果包含 3 列,而不是上面的内容,一个 id 列同时包含 idA 和 idB 以及两个收入列,如下所示:
+--------------------+----------+----------+
| id | A_INCOME| B_INCOME|
+--------------------+----------+----------+
|0d4f671c-552b-449...| 2250| null|
|9e03f92e-af0e-416...| 1250| null|
|c75d0d17-f3c1-497...| null| 4300|
|02572d79-bc54-427...| 2880| null|
|ca493eca-0709-4db...| null| 2320|
|cb7831ac-2550-435...| 1650| null|
|da7ac4c4-403b-466...| 2250| null|
|9bddb7b5-0047-4e1...| 5170| null|
|b54fc648-5f00-411...| null| 800|
|7aeade0a-47d4-459...| 4250| null|
|4fde8deb-a7de-45a...| 1650| null|
+--------------------+----------+----------+
该表本质上应该是在该数据帧上进行完全左连接和完全右连接的结果。有没有办法做到这一点?你会如何处理这个问题?提前谢谢了!
解决方案
我想你只是想要coalesce()
:
select coalesce(a.id, b.id) as id, a.income as a_income, b.income a b_income
from a full join
b
on a.id = b.id;
大多数数据库都支持标准USING
语法,因此您也可以使用:
select id, a.income as a_income, b.income a b_income
from a full join
b
using (id);
推荐阅读
- r - R:用日期值替换 NA。如果两列中都存在日期值,则选择最早的日期
- gsm - 在 Quectel EC25 调制解调器中锁定 MNC
- python - python中字节数组的流拆分
- css - 如何使用语法“flex:x”将同一行中的一个元素左对齐,另一个元素居中对齐
- python - OpenCV 获取 ApproxPolyDP 角点?
- kubernetes - 通过以下方式连接到另一个 Pod 中的服务器
: - python - 过滤 pandas 中的前 n 个值
- datetime - 如何使用 LocalDateTime 从 Java 8 中的字符串创建以毫秒为单位的长时间?
- python - 用 dicts 的 dict 更新 csv 文件
- c# - 如何通过连接加速这个 LINQ 查询?