Oracle SQL Select:如果不存在,请留空


1

我有两张桌子:

Table1
[ID]   [Number]
1      40
2      100
3      7

Table2
[ID]   [Number]   [Name]
1      40         A
3      7          C

数据源自Table1,然后在某些进程完成后复制到Table2(带有添加的Name)。我正在尝试SELECTTable1中的所有内容,同时还显示Table2中的Name字段,如果它存在的话。如果“名称”字段不存在(或者更准确地说,如果表2中尚不存在该ID),我希望将该字段留空。

期望的输出:

[ID]   [Number]   [Name]
1      40         A
2      100
3      7          C

尝试:

SELECT Table1.ID,Table1.Number,Table2.Name
WHERE Table1.ID=Table2.ID

我目前的尝试已完全省略,[ID] 2因为我正在尝试的语句是在两个表中查找ID,并且只在Table1中找到它。我的猜测是我可能需要使用COALESCEISNULL或者a JOIN,所有这些对我来说都是陌生的。这些(或许多的组合)中的任何一个是适合这项工作的工具吗?有没有办法Name只有在存在时才能包含该字段,否则将其留空?

Answers:


2

要获得所需的结果,必须使用外连接(自Oracle 9i以来语法中的示例):

SELECT
  Table1.ID,
  Table1.Number,
  Table2.Name
FROM Table1
OUTER JOIN Table2
  ON Table1.ID = Table2.ID

更新

为了解释一些事情(如duDE所述):

问题中使用的连接称为equi-join,这意味着只Table1选择了也存在的行Table2(反之亦然)。

外连接选择包含的所有行Table1并连接所有匹配的行Table2。如果Table2不包含匹配的行,则null返回所有列。


对OUTER JOIN的一个小解释将是完美的答案,像“外连接是类似于equi连接的连接,但Oracle也将从表中返回不匹配的行。”。然而+1来自我:)
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.