【发布时间】:2017-11-18 12:23:47
【问题描述】:
我有下表。
客户:
ID | clientName
--------------
1 A1
2 A2
3 A3
订单:
OrdID clientID status_cd
------------------------
100 1 DONE
101 1 SENT
102 3 SENT
状态:
status_cd status_category
DONE COMPL
SENT INPROG
我必须编写一个查询来获取所有客户并针对所有客户进行订单计数,无论 client_id 是否存在于 Order 表中并且具有“COMPL”作为状态类别的订单。
在这种情况下,我使用下面的查询,但它会过滤掉没有订单的客户。我想获得所有客户,使预期结果如下。
查询:
select c.ID, count(distinct o.OrdID)
from client c, order o, status s
where c.ID=o.client_id(+)
and o.status_cd=s.status_cd where s.status_category='COMPL'
group by c.ID
预期结果:
C.ID count(distinct o.OrdID)
----------------------------
1 1
2 0
3 0
有人可以帮我解决这个问题吗?我知道,在这种情况下,当我使用 where 子句时,左外连接的行为类似于内连接,但是还有其他方法可以实现上述结果吗?
【问题讨论】:
-
甚至 Oracle 也建议停止使用
(+)进行外连接。请改用明确的left join。 -
阅读 oracle 文档以了解“(+)”符号。您没有正确使用它来获得外部连接。 (它被忽略了。)甚至 oracle 都说不要使用它。
标签: sql oracle outer-join