我有以下查询:
SELECT s.username FROM `instagram_shop` s
INNER JOIN `instagram_shop_picture` p ON
s.id = p.shop_id
WHERE COUNT(p.id) = 0
GROUP BY p.id
;
我本质上是想找到所有还没有任何图片的商店。我想获取商店的用户名。但是上面的查询给了我#1111 - Invalid use of group function
这是为什么?
这是 instagram_shop 的样子:
这是 instagram_shop_图片:
最佳答案
这里有两件事需要纠正。
HAVING
用于与聚合函数相关的条件
Where
是在使用 Count、Min、Max、Sum 等聚合数据之前应用的过滤器。
Having
在聚合完成后使用,并且仅在聚合函数上使用。
使用LEFT OUTER JOIN
或EXISTS
当您使用内联接
时,您将仅从 instagram_shop 和 instagram_shop_picture 获取行。要获取 instagram_shop_picture 中不存在的行,您可以使用 OUTER JOIN
,或使用 EXISTS
SELECT s.username
FROM instagram_shop s
LEFT OUTER JOIN instagram_shop_picture p
ON s.id = p.shop_id
GROUP BY p.id
HAVING COUNT(p.id) = 0
或者
SELECT s.username
FROM instagram_shop s
Where Not Exists
(
Select 1
From instagram_shop_picture p
Where s.id = p.shop_id
)
关于mysql - count 和 group by 的问题以获得 count 为 0 的内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26631677/