如何连接 Oracle 中的三个表,其中一个表在外键列中有空值?

Posted

技术标签:

【中文标题】如何连接 Oracle 中的三个表,其中一个表在外键列中有空值?【英文标题】:How to join three tables in Oracle where one of the table has null values in the foreign key column? 【发布时间】:2014-03-23 19:23:30 【问题描述】:

我必须执行以下操作:

select items.segment1

from   items
      ,po_lines
      ,po_shipments

where  po_lines.item_id = items.item_id(+)   --po_lines has null in some item_id 
       po_shipments.ship_to = items.org_id;

但是外部连接似乎不起作用。查询应该返回 100 个值,而它只返回 85。它忽略了 po_lines.item_idnull 的 15。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

(+) 运算符应应用于允许有“缺失”行的表 - 您将它放在连接的错误一侧。

select items.segment1

from   items
      ,po_lines
      ,po_shipments

where  po_lines.item_id (+) = items.item_id   --po_lines has null in some item_id 
       po_shipments.ship_to = items.org_id;

【讨论】:

【参考方案2】:

引用Wikipedia JOIN (SQL):

ANSI 标准 SQL 指定五种类型的 JOIN:INNER、LEFT OUTER、 右外、全外和交叉

你可以这样使用left join

select items.segment1
from   
   items
left outer join 
   po_lines on po_lines.item_id = items.item_i
inner join 
   po_shipments on  po_shipments.ship_to = items.org_id;

你的oracle (*) syntax is deprecated:

从 Oracle9i 开始,令人困惑的外连接语法使用 “(+)”表示法已被 ISO 99 外连接语法取代。

【讨论】:

Thnx。我明天去实验室时会试试看。 欢迎来到 ***。

以上是关于如何连接 Oracle 中的三个表,其中一个表在外键列中有空值?的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中多表连接如何用

如何在第三个表中没有公共列的情况下连接三个表?

Oracle - 如何使用JSON数据连接表?

在 Join 中使用一个表,其中一个表具有过去三个月的所有日期 - Oracle

如何在Oracle中多次更新与另一个表连接的表?

Oracle 如何扩展表空间