SELECT a.org,
a.id,
a.Name,
b.ordNum
FROM customers A,
orders B
WHERE a.org = 'JJJ'
AND a.org = b.org (+)
AND b.addr_type (+) = 'ST' -- <<<<<<<<<<<<<<<<< why do i need to add (+) here
AND a.cust_id = b.cust_id (+)
ORDER BY 2
我有一个包含客户列表(A)的表和一个称为订单(B)的表,这些表具有客户可能已下达的订单。我上面的查询应该给我所有客户的姓名和订单号(如果有与该客户链接的订单)。
我的问题是..为什么我需要在b.addr_type之后添加(+)才能获得所有客户,即使他们没有下订单。
(+)语法告诉Oracle执行左联接而不是内部联接。
结果是一个记录列表,其中包含表中所有带有价位的列customers
和orders
表中有一些空列。
如果orders
表中的列是NULL
,则这些记录的where条件b.addr_type = 'ST'
始终FALSE
是,因此您将无法获得所需的结果。
相反,如果您编写,则将b.addr_type(+) = 'ST'
获得所有与条件匹配的列以及NULL
由于左连接而具有值的列,这就是您想要获得的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句