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

时间:2014-03-23 19:23:31

标签: mysql sql oracle

我必须执行以下操作:

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个。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

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;

答案 1 :(得分:0)

引用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外连接语法取代。