如何在仅具只读权限时对外部数据集与表执行Outer Join?
问题描述
我有一份外部数据集:
| Column A | Column B |
|---|---|
| a1 | b1 |
| a2 | b2 |
需要将其与系统内某张表(假设表名为target_table)执行Outer Join,该表结构及数据如下:
| Column A | Column B | Column C |
|---|---|---|
| a1 | b2 | c3 |
| a2 | b2 | c4 |
我只有系统的只读权限,无法创建新表,想要得到如下结果:
| Column A | Column B | Column C |
|---|---|---|
| a1 | b1 | NULL |
| a2 | b2 | c4 |
之前尝试用WHERE语句查询,但未匹配到的行无法被保留,需要保留未匹配行并以NULL填充对应字段。
解决方案
用**左连接(LEFT JOIN)**就能解决这个问题,它会保留左表(你的外部数据集)的所有行,右表匹配不上的字段自动填NULL。因为你没有建表权限,直接用VALUES子句把外部数据集写成临时数据就行,不用创建新表。
示例SQL语句如下:
SELECT ext.`Column A`, ext.`Column B`, t.`Column C` FROM (VALUES ('a1', 'b1'), ('a2', 'b2') ) AS ext(`Column A`, `Column B`) LEFT JOIN target_table t ON ext.`Column A` = t.`Column A` AND ext.`Column B` = t.`Column B`;
关键说明:
- 别把关联条件放到WHERE里:这就是你之前失败的原因——WHERE是在JOIN完成后过滤数据,会把左表没匹配上的行直接删掉;而LEFT JOIN的ON条件是在关联时处理,没匹配上的右表字段会留NULL,左表的行全部保留。
- 关联时要同时匹配
Column A和Column B,这样只有两个字段都对应上时,才会取出目标表的Column C值,否则返回NULL,正好符合你要的结果。
内容的提问来源于stack exchange,提问作者Milosu
相关产品推荐
相关产品推荐

