2011-08-04 17 views
2

私は以前、このpostから必要な最初の結果を得るために、このクエリ、返しSQLクエリ:子供なしで両親を作る方法?

SELECT parents.tag_id AS ParentID, 
     parents.tag_name AS ParentName, 
     COUNT(childs.tag_id) AS TotalChildren 
FROM root_tags AS parents 
    LEFT OUTER JOIN root_tags AS childs 
     ON parents.tag_id = childs.parent_id 
WHERE parents.parent_id IS NULL 
GROUP BY parents.tag_id, parents.tag_name 
ORDER BY parents.tag_id 

ParentID ParentName TotalChildren 
3   Tagname-1 2 
5   tagname-2 2 
6   tagname-3 1 
9   tagname-4 1 
18   tagname-10 0 
24   tagname-13 0 
26   tagname-14 0 
28   tagname-15 0 

を持っている。しかし、私が持っている両親を返すようにしたいと私は今、別の問題を抱えていますない子供たちは全く、

ParentID ParentName TotalChildren 
18   tagname-10 0 
24   tagname-13 0 
26   tagname-14 0 
28   tagname-15 0 

は、だから私は、これにクエリを作ってみました

SELECT 
    parents.tag_id AS ParentID, 
    parents.tag_name AS ParentName, 
    COUNT(childs.tag_id) AS TotalChildren 

FROM root_tags AS parents 
    LEFT OUTER JOIN root_tags AS childs 
    ON parents.tag_id = childs.parent_id 

WHERE parents.parent_id IS NULL 
AND COUNT(childs.tag_id) = '0' 
GROUP BY parents.tag_id, parents.tag_name 
ORDER BY parents.tag_id 

しかし、それは#1111 - Invalid use of group function

は、私はそれをどのように修正することができ、エラーを返しますか?

答えて

2

ちょうどあなたに元のクエリをHAVING句を追加します。

SELECT parents.tag_id AS ParentID, 
     parents.tag_name AS ParentName, 
     COUNT(childs.tag_id) AS TotalChildren 
FROM root_tags AS parents 
    LEFT OUTER JOIN root_tags AS childs 
     ON parents.tag_id = childs.parent_id 
WHERE parents.parent_id IS NULL 
GROUP BY parents.tag_id, parents.tag_name 
HAVING COUNT(childs.tag_id) = 0 
ORDER BY parents.tag_id 

あなたの問題は、あなたが集約し、機能(COUNT)とWHERE句を使用しようとしたことです。しかし、アグリゲーションの前にフィルタリングするには、WHEREを使用する必要があります。 HAVINGは、アグリゲーションの後にフィルタリング結果です。

+0

となりました!ありがとう! – laukok

1

変更の代わりにWHEREのHAVING

GROUP BY parents.tag_id, parents.tag_name 
HAVING COUNT(childs.tag_id) = 0 
+0

それを得ました!ありがとう! – laukok

関連する問題