在oracle中没有相同的密钥加入两个表

时间:2016-07-14 22:45:29

标签: sql oracle join oracle11g

假设我有2个表A和B,并希望加入这些表,

A:
---------------
id   |  name  |
---------------
1    |  jack  |
2    |  hanna |
3    |  jack  |
4    |  hanna |

B:
---------------
id   | status |
---------------
1    | online |
3    | offline|
5    |  away  |

如何连接这两个表以获得如下输出

-----------------------
id   |  name  |  Status
-----------------------
1    |  jack  |  online 
2    |  hanna |  (null)
3    |  jack  |  offline
4    |  hanna |  (null)
5    | (null) |  away

我尝试过像

这样的外连接
A.id = B.id(+) 

它只显示仅存在A.id的条目,但是如何从A和B获取所有记录?

2 个答案:

答案 0 :(得分:1)

这称为full outer join

SELECT NVL(a.id, b.id) as id, a.name, b.status
FROM A a FULL OUTER JOIN B b ON (a.id = b.id)

要避免两个id列或可能为NULL的id列,请使用NVL。 NVL函数只返回第一个非null的参数。在这种情况下,如果存在a.id,则返回它。否则,b.id将是。由于两列中的一列不能为空(如果它们不存在,它们将始终匹配),这将始终返回正确的id。将其弹出到名为“id”的结果列中,您将获得所期望的结果。

答案 1 :(得分:0)

select a.id, a.name, b.status
from a 
full outer join b on a.id = b.id;