首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql查询:如何让父母没有孩子?

sql查询:如何让父母没有孩子?
EN

Stack Overflow用户
提问于 2011-08-05 00:22:35
回答 3查看 131关注 0票数 2

我使用这个查询来获得我想要的第一个结果,来自前面的post

代码语言:javascript
复制
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

它返回,

代码语言:javascript
复制
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

但我现在有另一个问题,因为我想把那些根本没有孩子的父母还回去,

代码语言:javascript
复制
ParentID    ParentName  TotalChildren
18          tagname-10  0
24          tagname-13  0
26          tagname-14  0
28          tagname-15  0

所以我试着对此进行查询,

代码语言:javascript
复制
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

我怎么才能修复它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-05 00:26:31

只需在原始查询中添加一个HAVING子句:

代码语言:javascript
复制
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用于对聚合后的结果进行过滤。

票数 2
EN

Stack Overflow用户

发布于 2011-08-05 00:27:01

更改此部件

代码语言:javascript
复制
AND COUNT(childs.tag_id) = '0'
GROUP BY parents.tag_id, parents.tag_name

代码语言:javascript
复制
GROUP BY parents.tag_id, parents.tag_name
HAVING COUNT(childs.tag_id) = 0
票数 1
EN

Stack Overflow用户

发布于 2011-08-05 00:35:31

使用HAVING而不是WHERE,以及在GROUP BY之后

http://blog.cnizz.com/tag/mysql-error-1111/

这可能会很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6944991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档