SQL-不确定如何连接表

SQL-不确定如何连接表,sql,oracle,Sql,Oracle,我正试图像这样连接两个表: 表A ID Value1 1 A 2 B 3 C 表B ID Value2 1 A 3 B 4 C 结果应该是: ID Value1 Value2 1 A A 2 B null 3 C B 4 null C 即,在ID上将表A连接到表B。如果表A中不存在ID,则添加表B中的ID 最接近我的是: SELECT a

我正试图像这样连接两个表:

表A

ID    Value1
1     A
2     B
3     C
表B

ID    Value2
1     A
3     B
4     C
结果应该是:

ID    Value1  Value2
1     A       A
2     B       null
3     C       B
4     null    C 
即,在ID上将表A连接到表B。如果表A中不存在ID,则添加表B中的ID

最接近我的是:

SELECT 
    a.ID, a.Value1, b.Value2 
FROM 
    TableA a 
OUTER JOIN 
    TableB b ON a.ID = b.ID
这给了我TableB中的新行,但ID为空

我如何才能做到这一点?

试试这个:

SELECT *
FROM TableA A
FULL OUTER JOIN TableB B
ON A.ID = B.ID;
请注意:不应在SQL中使用空格命名表。

尝试以下方法:

SELECT *
FROM TableA A
FULL OUTER JOIN TableB B
ON A.ID = B.ID;

请注意:您不应该在SQL中使用空格命名表。

您非常接近,只需朝正确的方向轻轻推一下即可:

SELECT COALESCE(a.ID, B.ID) As ID, a.Value1, b.Value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID

COALESCE
函数返回它得到的第一个非空参数。由于这是一个完整的外部联接,
a.id
在一行上为空,
b.id
在另一行上为空。

您非常接近,只需朝正确的方向轻轻推一下即可:

SELECT COALESCE(a.ID, B.ID) As ID, a.Value1, b.Value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID

COALESCE
函数返回它得到的第一个非空参数。由于这是一个完整的外部联接,
a.id
在一行上为空,
b.id
在另一行上为空。

记住联接不同表的基本规则

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
对于您的情况:

SELECT a.value1, b.value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID
记住完全外接


FULL-OUTER-JOIN
关键字返回表(tableA)和表(tableB)中的所有行,FULL-OUTER-JOIN关键字组合了左连接和右连接的结果。

记住连接不同表的基本方法

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
对于您的情况:

SELECT a.value1, b.value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID
记住完全外接



FULL-OUTER-JOIN
关键字返回表(tableA)和表(tableB)中的所有行,FULL-OUTER-JOIN关键字组合了左连接和右连接的结果。

LEFT-JOIN是一种方法。LEFT-JOIN无法获得预期的结果。LEFT-JOIN不添加最后一行,它只添加Value2列。外部联接添加Value2列和最后一行,但不添加该行中的ID。这是什么具体的RDBMS?SQL只是一种查询语言——但它并没有涵盖SQL标准的所有特定于供应商的扩展/解释。。。。请添加相关标记,如
oracle
sqlserver
postgresql
db2
,或者您可能正在使用的任何其他标记…@marc_s抱歉,是oracle。修复了标记。LEFT JOIN是一种方法。LEFT JOIN无法获得预期的结果。LEFT JOIN不添加最后一行,只添加Value2列。外部联接添加Value2列和最后一行,但不添加该行中的ID。这是什么具体的RDBMS?SQL只是一种查询语言——但它并没有涵盖SQL标准的所有特定于供应商的扩展/解释。。。。请添加相关标记,如
oracle
sqlserver
postgresql
db2
,或者您可能正在使用的任何其他标记…@marc_s抱歉,是oracle。修复了标记。该标记将返回4列:id、id、value1、value2。
完全外部连接
在所有DBMS上不可用。该标记将返回4列:id、id、value1、value2。
完全外部连接
在所有DBMS上不可用。
完全外部连接
在所有DBMS上不可用。这正是我需要的!谢谢你的快速回复。@sagi-outer-join和full-outer-join基本上是一样的,尽管最后一个在我看来更容易理解。如果OP使用的是outer-join,他也应该能够使用full-outer-join。我不知道有哪个数据库支持
outer-join
但不支持
full-outer-join
MySQL支持
LEFT-outer-join
而不支持
full-outer-join
@sagi这不是我的问题。我询问了一个支持
外部联接
但不支持
完全外部联接
的数据库。
左外部联接
并不等同于
外部联接
完全外部联接
在所有DBMS上都不可用。这正是我所需要的!谢谢你的快速回复。@sagi-outer-join和full-outer-join基本上是一样的,尽管最后一个在我看来更容易理解。如果OP使用的是outer-join,他也应该能够使用full-outer-join。我不知道有哪个数据库支持
outer-join
但不支持
full-outer-join
MySQL支持
LEFT-outer-join
而不支持
full-outer-join
@sagi这不是我的问题。我询问了一个支持
外部联接
但不支持
完全外部联接
的数据库。
左侧外部联接
不等同于
外部联接