【问题标题】:Outer Join with plus (+) in Oracle [duplicate]Oracle中的加号(+)外连接[重复]
【发布时间】:2015-11-19 09:21:41
【问题描述】:

我在 Oracle 中有一些表。

Table_1 包含:

id|name
1|boy
2|roy

Table_2 包含:

id|value
1|90
2|100

Table_3 包含:

id|class
1|A
2|B

我想加入所有三个表。

查询_1:

SELECT A.ID,A.NAME,B.VALUE,C.CLASS 
FROM 
TABLE_1 A, TABLE_2 B, TABLE_3 C
WHERE 
A.ID=B.ID(+) AND
B.ID=C.ID(+)

查询_2:

SELECT A.ID,A.NAME,B.VALUE,C.CLASS 
FROM 
TABLE_1 A, TABLE_2 B, TABLE_3 C
WHERE 
A.ID=B.ID(+) AND
A.ID=C.ID(+)

哪一个是真的?

【问题讨论】:

  • 你为什么不试试呢?无论如何,由于您在所有 3 个表中都有相同的 id,因此内部连接也可以正常工作。
  • 停止使用 (+)。 1) 这不是 ANSI 投诉 2) 可能难以阅读 3) 您在 SQL 标准中有很好的 OUTER JOIN 子句
  • @X.L.Ant :我都尝试过并且成功了。但我不确定我做的是对的:)
  • 当然两者都有效,因为所有 id 都存在于任何地方。为什么不做一个简单的内部连接?但正如 @lad2025 所说,无论您选择什么,都使用符合 ANSI 的子句(内连接、左外连接...)
  • @lad2025 : 我会试试 :)

标签: oracle join


【解决方案1】:

当您需要外部联接时: 您的查询将包括两个或多个表,其中每个记录可能不存在匹配项。例子将最好地解释。如果您有两个表:“父”和“工作”。如果您想问这个问题:我们在本地雇主的父列表中有哪些联系人,内部联接可以正常工作:

    select w.employer, w.phone, w.address,p.name, p.phone
    from work w, parent p
    where w.person_id = p.person_id

如果问题是我们的父母在哪里工作 - 有些人可能失业并且在“工作”表中没有匹配 - 现在您需要一个外部连接。在 Oracle SQL 中:

    select p.name, p.phone, w.employer, w.phone, w.address,
    from work w, parent p
    where p.person_id =  w.person_id(+)

(+) 总是放在我们需要“综合”添加缺失 id 的一侧。

【讨论】:

    猜你喜欢
    • 2017-11-15
    • 2012-10-19
    • 2018-05-23
    • 2019-08-30
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    相关资源
    最近更新 更多