sql查询:如何让父母没有孩子?
我有这个查询来获取我想要的第一个结果 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 -群组功能使用无效
如何修复?
I have this query to get the first result I want from this post earlier,
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
Which returns,
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
But I have another problem now as I want to return the parents that have not children at all,
ParentID ParentName TotalChildren
18 tagname-10 0
24 tagname-13 0
26 tagname-14 0
28 tagname-15 0
So I tried to make query into this,
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
But it returns an error #1111 - Invalid use of group function
How can I fix it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只需在原始查询中添加一个
HAVING
子句即可:您的问题是您尝试将
WHERE
子句与聚合和函数 (COUNT
) 一起使用。但您应该在聚合之前使用WHERE
过滤数据。HAVING
用于过滤聚合后的结果。Just add a
HAVING
clause to you original query:Your problem is that you tried to use
WHERE
clause with aggregation and function (COUNT
). But you should useWHERE
to filter the data before aggregation.HAVING
is for filtering results after aggregation.将此部分更改
为
Change this part
to
使用 HAVING 代替 WHERE,并在 GROUP BY
http://blog.cnizz.com/ 之后tag/mysql-error-1111/
这可能很有用。
Use HAVING instead of WHERE, and after GROUP BY
http://blog.cnizz.com/tag/mysql-error-1111/
This could be useful.