0

コンポーネントをテーブルにカウントするために使用する次の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 の 2 つの値が得られることに気付きました。数値の順序が厳密でなければならないため、結果 1、0、1 を取得する必要があります。この問題を解決する方法を教えてください。

4

1 に答える 1

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;
于 2013-02-27T20:06:00.800 に答える