我有这个Oracle SQL查询,用于将组件计入表中:
select ct.name as component_type, count(1) as cnt from componentstats cs, componenttype ct
WHERE CS.COMPONENTTYPEID = CT.COMPONENTTYPEID AND CT.COMPONENTTYPEID IN (1000, 1300, 4000)
group by ct.name order by ct.name;
这是输出:
COMPONENT_TYPE CNT
---------------------------------------------------------------------------------------------------- ----------------------
DATACENTER 1
ISP 1
NETWORK 1
我注意到如果没有类型为1300的组件我得到两个值1和1.我需要得到结果1,0,1,因为数字的顺序必须严格。你能告诉我如何解决这个问题吗?
答案 0 :(得分:3)
您需要一个外部联接。这是您应该使用标准ANSI连接语法的一个很好的理由。
您还需要将count()
更改为从外部联接的“外部”部分计数。以下是使用left outer join
编写的查询:
select ct.name as component_type, count(cs.componenttypeid) as cnt
from componenttype ct left outer join
componentstats cs
on CS.COMPONENTTYPEID = CT.COMPONENTTYPEID
where CT.COMPONENTTYPEID IN (1000, 1300, 4000)
group by ct.name
order by ct.name;