mysql - 在 mysql 中使用 GROUP BY 给出语法错误

标签 mysql syntax group-by

我有这个查询:

select * FROM `posters` p
INNER JOIN `poster_logs` pl ON pl.`pos_id`= p.`id`
WHERE pl.`log` = 'Accepted' AND p.`book`='book1' AND
p.`category`='category1'
ORDER BY p.`category`, p.`id`

这多次返回给我海报_logs.pos_id,但我不想要这个,所以我尝试以这种方式添加“group by pl.pos_id”:

select * FROM `posters` p
INNER JOIN `poster_logs` pl ON pl.`pos_id`= p.`id`
WHERE pl.`log` = 'Accepted' AND p.`book`='book1' AND
p.`category`='category1'
group by pl.`pos_id`
ORDER BY p.`category`, p.`id`

但这给了我一个语法错误,我不知道我做错了什么。我真的是 SQL 初学者。

最佳答案

您使用的 MySQL 版本是什么?

您当前的查询:-

SELECT * 
FROM `posters` p
INNER JOIN `poster_logs` pl ON pl.`pos_id`= p.`id`
WHERE pl.`log` = 'Accepted' 
AND p.`book`='book1' 
AND p.`category`='category1'
GROUP BY pl.`pos_id`
ORDER BY p.`category`, p.`id`

没有使用任何聚合字段(但由于您使用了 SELECT *,所以不知道它返回哪些字段)。

老版本的 MySQL 确实支持这一点,尽管它违反了 SQL 标准,除非在某些有限的情况下。

较新版本的 SQL 默认情况下关闭对此功能的支持,但您可以设置一个选项来启用它:-

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

MySQL 5.7.5及以上版本实现了函数依赖检测。如果启用 ONLY_FULL_GROUP_BY SQL 模式(默认情况下),MySQL 将拒绝选择列表、HAVING 条件或 ORDER BY 列表引用既未在 GROUP BY 子句中命名也不在功能上依赖于它们的非聚合列的查询。 (在 5.7.5 之前,MySQL 不检测函数依赖性,并且默认情况下不启用 ONLY_FULL_GROUP_BY。有关 5.7.5 之前的行为的说明,请参阅 MySQL 5.6 引用手册。)

对于您当前的查询,如果它有效,那么它将为每个 pos_id 返回 1 行,但其他列来自哪一行尚未定义。通常您需要一个特定的行(可能是第一行,也可能是最后一行)。

关于mysql - 在 mysql 中使用 GROUP BY 给出语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43135422/

相关文章:

sql - 在Oracle SQL中,我可以查询表的一个分区而不是整个表以使其运行得更快吗?

arrays - 如何将哈希表添加到多维数组?无法通过成员枚举分配值

mysql - 统计mysql中各组的总体结果

ruby:根据日期所在的星期将日期数组分组为散列,并将键作为每周的第一个日期

mysql - SQL 存储过程

php - 使用 PHP 和 Swift 2 上传图片?

mysql - SQL 查询从嵌入代码中获取 youtube id

mysql - Spark Mysql 快速更新

variables - 在flex中声明变量

r - 按连接值对 R 数据帧进行分组