sql查询:如何让父母没有孩子?
Posted
技术标签:
【中文标题】sql查询:如何让父母没有孩子?【英文标题】:sql query: how to make the parents without children? 【发布时间】:2011-10-20 04:11:02 【问题描述】:我有这个查询是为了从之前的 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
我该如何解决?
【问题讨论】:
【参考方案1】:只需在原始查询中添加 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
您的问题是您尝试将WHERE
子句与聚合和函数一起使用(COUNT
)。但是您应该使用WHERE
过滤数据之前 聚合。 HAVING
用于过滤结果聚合后。
【讨论】:
【参考方案2】:改变这部分
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
【讨论】:
【参考方案3】:使用 HAVING 代替 WHERE,并在 GROUP BY 之后
http://blog.cnizz.com/tag/mysql-error-1111/
这可能很有用。
【讨论】:
以上是关于sql查询:如何让父母没有孩子?的主要内容,如果未能解决你的问题,请参考以下文章