【发布时间】:2016-11-22 01:11:41
【问题描述】:
我有两张表要合并在一起。为简单起见,它们各有两列:表中通用的 ID 和不同的数值。但是,并非所有 ID 都出现在两个表中,因此我使用了 FULL OUTER JOIN。
Table1 Table2
+------+--------+ +------+--------+
| ID | Value1 | | ID | Value2 |
+------+--------+ +------+--------+
| ABC | 125 | | ABC | 317 |
| DEF | 13 | | HIJ | 95 |
+------+--------+ +------+--------+
我希望 OUTER JOIN 能给我这样的所有记录:
+------+--------+--------+
| ID | Value1 | Value2 |
+------+--------+--------+
| ABC | 125 | 317 |
| DEF | 13 | |
| HIJ | | 95 |
+------+--------+--------+
但我看到的是,如果 ID 在 Table1 中不存在,则不会将其复制到合并结果中:
+------+--------+--------+
| ID | Value1 | Value2 |
+------+--------+--------+
| ABC | 125 | 317 |
| DEF | 13 | |
| | | 95 |
+------+--------+--------+
为什么我的 ID 会是空白的?我的查询如下:
SELECT ID, Value1, Value2
FROM Table1
FULL OUTER JOIN Table2 ON Table1.ID == Table2.ID;
我使用的是最接近 SQL Server 的公司内部语言。虽然存在一些差异,但我想我会先检查我对连接语法的理解。
【问题讨论】:
-
键和外键列在 SQL 中并没有神奇地组合在一起。您需要明确使用
COALESCE或修改您的消费程序以接受两个关键列。
标签: sql outer-join