mysql - count 和 group by 的问题以获得 count 为 0 的内连接

标签 mysql sql

我有以下查询:

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 的样子:

enter image description here

这是 instagram_shop_图片:

enter image description here

最佳答案

这里有两件事需要纠正。

HAVING 用于与聚合函数相关的条件

Where 是在使用 Count、Min、Max、Sum 等聚合数据之前应用的过滤器。

Having 在聚合完成后使用,并且仅在聚合函数上使用。

使用LEFT OUTER JOINEXISTS

当您使用内联接时,您将仅从 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/

相关文章:

sql - 结果在 SQL 查询中获取 NULL

sql - 有没有办法找到比运行整个查询更快的返回结果数

c++ - 从 Eclipse (CDT) 连接到 MySQL

Java错误: java. sql.SQLException:没有为参数15指定值

mysql - 将 Mysql 列从一个表添加到另一个表

php - affect_rows & 从 php 更新 mysql

sql - 土耳其语言设置的奇怪行为

mysql - 我只是找不到这个 MySQL "Exists()"错误的合适解决方案

mysql - 子选择 SUM of columns WHERE x=y

php - 将信息从新创建的记录发送到不同的 MySQL 表