gpt4 book ai didi

mysql - SQLSTATE[42000] : Syntax error or access violation: 1055 Expression #2

转载 作者:可可西里 更新时间:2023-11-01 08:39:29 27 4
gpt4 key购买 nike

我正在尝试了解 MySql 5.7 的工作原理。在下面的查询中

      SELECT 
r.*,
CONCAT(u.fname, ' ', u.lname) AS name
FROM
`events` AS r
LEFT JOIN `users` AS u
ON r.user_id = u.id
WHERE r.event_id = 1
GROUP BY r.user_id
ORDER BY r.date ;

我收到错误“SELECT 列表不在 GROUP BY 子句中并且包含非聚合列‘r.id’,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by [代码:42000 ] "

但是像这样的查询工作正常:

  SELECT 
r.id,
r.event_id,
r.user_id,
r.date
CONCAT(u.fname, ' ', u.lname) AS name
FROM
`events` AS r
LEFT JOIN `users` AS u
ON r.user_id = u.id
WHERE r.event_id = 1
GROUP BY r.user_id, r.event_id, r.id, r.date
ORDER BY r.date ;

因为我在本地主机上工作,所以我可以更改 my.ini 文件并将 sql_mode 设置为“STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER”

但是当上线时这将是一个问题,因为没有多少人可以访问 my.ini 文件,尤其是在共享主机上。

在我看来,声明每个字段并相应地进行聚合似乎效率不高。

由于我对 MySql 的了解只是初学者,有没有更好的方法来编写上面的查询。如果我需要从单个表中提取 10 或 20 个字段,将所有字段汇总在一起,这似乎有点愚蠢。

最佳答案

这个概念很简单,你必须在组中声明所有不涉及聚合函数的列

你的

SELECT 
r.id,
r.event_id,
r.user_id,
r.date
CONCAT(u.fname, ' ', u.lname) AS name
FROM
`events` AS r
LEFT JOIN `users` AS u
ON r.user_id = u.id
WHERE r.event_id = 1
GROUP BY r.user_id, r.event_id, r.id, r.date
ORDER BY r.date ;

相当于

SELECT DISTINCT
r.id,
r.event_id,
r.user_id,
r.date
CONCAT(u.fname, ' ', u.lname) AS name
FROM
`events` AS r
LEFT JOIN `users` AS u
ON r.user_id = u.id
WHERE r.event_id = 1
ORDER BY r.date ;

在第一个你有 r.* 但这不在 group by 中

关于mysql - SQLSTATE[42000] : Syntax error or access violation: 1055 Expression #2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40662899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com