为什么我在 FULL OUTER JOIN 的匹配列上得到空白值?
Why am I getting blank values on the matched column for a FULL OUTER JOIN?
我有两个表要合并在一起。为简单起见,它们各有两列:一个跨表通用的 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 |
+------+--------+--------+
但我看到的是,如果表 1 中不存在 ID,则不会将其复制到合并结果中:
+------+--------+--------+
| ID | Value1 | Value2 |
+------+--------+--------+
| ABC | 125 | 317 |
| DEF | 13 | |
| | | 95 |
+------+--------+--------+
为什么我的身份证是空白的?我的查询如下:
SELECT ID, Value1, Value2
FROM Table1
FULL OUTER JOIN Table2 ON Table1.ID == Table2.ID;
我使用的是最接近 SQL 服务器的公司内部语言。虽然存在一些差异,但我想我会先检查一下我对连接语法的理解。
试试这个:
SELECT
COALESCE( Table1.ID, Table2.ID ) AS [ID],
Table1.Value1,
Table2.Value2
FROM
Table1
FULL OUTER JOIN Table2 ON Table1.ID = Table2.ID
首先,您的查询在我所知道的任何数据库中在语法上都是无效的。 FROM
中的每个 table 都有一个名为 ID
的列。因此,SELECT
中的不合格 ID
是不明确的——不知道它来自哪个 table。
其次,如果你有 SELECT table1.ID, table2.ID
,那么你会看到发生了什么。当 ID
在一个 table 而不是另一个时,另一个值将是 NULL
.
许多数据库支持 ANSI 标准 using
子句。有了这个,你可以做到:
SELECT ID, Value1, Value2
FROM Table1 FULL OUTER JOIN
Table2
USING (ID);
替代方法是使用 COALESCE()
函数。
我有两个表要合并在一起。为简单起见,它们各有两列:一个跨表通用的 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 |
+------+--------+--------+
但我看到的是,如果表 1 中不存在 ID,则不会将其复制到合并结果中:
+------+--------+--------+
| ID | Value1 | Value2 |
+------+--------+--------+
| ABC | 125 | 317 |
| DEF | 13 | |
| | | 95 |
+------+--------+--------+
为什么我的身份证是空白的?我的查询如下:
SELECT ID, Value1, Value2
FROM Table1
FULL OUTER JOIN Table2 ON Table1.ID == Table2.ID;
我使用的是最接近 SQL 服务器的公司内部语言。虽然存在一些差异,但我想我会先检查一下我对连接语法的理解。
试试这个:
SELECT
COALESCE( Table1.ID, Table2.ID ) AS [ID],
Table1.Value1,
Table2.Value2
FROM
Table1
FULL OUTER JOIN Table2 ON Table1.ID = Table2.ID
首先,您的查询在我所知道的任何数据库中在语法上都是无效的。 FROM
中的每个 table 都有一个名为 ID
的列。因此,SELECT
中的不合格 ID
是不明确的——不知道它来自哪个 table。
其次,如果你有 SELECT table1.ID, table2.ID
,那么你会看到发生了什么。当 ID
在一个 table 而不是另一个时,另一个值将是 NULL
.
许多数据库支持 ANSI 标准 using
子句。有了这个,你可以做到:
SELECT ID, Value1, Value2
FROM Table1 FULL OUTER JOIN
Table2
USING (ID);
替代方法是使用 COALESCE()
函数。