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

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

我有两张桌子:

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

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

数据源自表 1,然后在完成某些过程后复制到表 2(并添加名称)。我尝试将SELECT表 1 中的所有内容复制到表 2 中,同时显示表 2 中的“名称”字段(如果存在)。如果“名称”字段不存在(或者更准确地说,如果 ID 尚不存在于表 2 中),我想将该字段留空。

期望输出:

[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 中找到它。我猜我可能需要使用COALESCEISNULLJOIN,所有这些对我来说都是陌生的。这些(或许多的组合)中的任何一个都是适合这项工作的工具吗?有没有办法让我只在字段存在时包含它Name,否则将其留空?

答案1

为了达到您想要的结果,您必须使用外连接(自 Oracle 9i 起语法有效中的示例):

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

更新

进一步解释一下(正如 duDE 所提到的):

问题中使用的连接称为等连接,这意味着只Table1选择中的行,并且也存在于中Table2(反之亦然)。

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

相关内容