SQL-不确定如何连接表
我正试图像这样连接两个表: 表ASQL-不确定如何连接表,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
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这不是我的问题。我询问了一个支持外部联接
但不支持完全外部联接
的数据库。左侧外部联接
不等同于外部联接
。