0

私はmysql DBを持っています。

以下のクエリを実行しています。

SELECT cluster,
       infra_properties.property_name property,
       count(*)
FROM   raw_alerts,
       infra_properties
WHERE  infra_properties.parent_group = raw_alerts.cluster
       AND cluster = 'abuse-content'
       AND infra_properties.property_name = 'BigBro'
       AND timestamp BETWEEN '2012-12-24 00:00:00' AND '2012-12-24 23:59:59'
GROUP  BY cluster; 

出力が null になっていますが、私の要件は count=0 です。後述のとおりです。

+---------------+----------+----------+
| cluster       | property | count(*) |
+---------------+----------+----------+
| abuse-content | BigBro   |    0     |
+---------------+----------+----------+
1 row in set (0.30 sec)
4

1 に答える 1

0

2 つのテーブルに一致するレコードがない場合、行は返されません。

おそらく行う必要があるのは、クラスターとプロパティ列を含む追加のテーブルを用意してから、次のようなことを行うことです:-

SELECT a.cluster, a.property, count(c.id)
    FROM SomeExtraTable a
    LEFT OUTER JOIN raw_alerts b ON a.cluster = b.cluster AND AND b.cluster = 'abuse-content'
    LEFT OUTER JOIN infra_properties c 
ON a.property = c.property 
AND c.parent_group = b.cluster
AND c.property_name = 'BigBro' 
AND c.timestamp BETWEEN '2012-12-24 00:00:00' AND '2012-12-24 23:59:59'
    GROUP  BY  a.cluster, a.property

(タイムスタンプ列がどのテーブルにあるかは推測しているだけです)

于 2013-02-22T11:46:21.840 に答える