如何连接 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_id
是 null
的 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 中的三个表,其中一个表在外键列中有空值?的主要内容,如果未能解决你的问题,请参考以下文章