我使用这个查询来获得我想要的第一个结果,来自前面的post,
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
我怎么才能修复它?
发布于 2011-08-05 00:26:31
只需在原始查询中添加一个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用于对聚合后的结果进行过滤。
发布于 2011-08-05 00:27:01
更改此部件
AND COUNT(childs.tag_id) = '0'
GROUP BY parents.tag_id, parents.tag_name至
GROUP BY parents.tag_id, parents.tag_name
HAVING COUNT(childs.tag_id) = 0发布于 2011-08-05 00:35:31
使用HAVING而不是WHERE,以及在GROUP BY之后
http://blog.cnizz.com/tag/mysql-error-1111/
这可能会很有用。
https://stackoverflow.com/questions/6944991
复制相似问题