我必须执行以下操作:
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个。
任何帮助都将不胜感激。
答案 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)
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外连接语法取代。