mysql - SELECT 列表不在 GROUP BY 子句中且包含非聚合列;这与 sql_mode=only_full_group_by 不兼容

标签 mysql hibernate group-by mysql-error-1064

这是我使用 Hibernate 的查询:

Query query = session.createQuery("
              From Invite 
             where (mobileNo= :email OR mobileNo= :phone) AND status= :status GROUP BY job");

我收到错误:

        SELECT list is not in 
      GROUP BY clause and contains nonaggregated column 'irecruter.invitecand0_.invite_id' which is not functionally dependent on columns in GROUP BY clause; this is  incompatible with sql_mode=only_full_group_by

我从 StackOverflow 得到了解决方案:SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

但是错误又回来了。我想要永久的解决方案。有人可以对此提出建议吗?

最佳答案

想象一下存储论坛帖子的表。您存储帖子本身、帖子的日期以及发布它的用户。

当你做类似的事情时:

SELECT
    User_ID,
    PostedDate,
    COUNT(*) AS Posts
FROM myForum
WHERE PostedDate = CURDATE()
GROUP BY User_ID;

我们都知道您想要什么。数据库会说“User_ID?是的。在分组依据之后它必须是唯一的。帖子由分组依据聚合,但我到底应该用 PostedDate 做什么?我应该返回哪个?!?”。在这种情况下,它将是唯一的,但如果 where 子句不检查确切的“PostedDate”而是检查范围,则该语句未定义应返回哪个值。

安全模式下的这个设置可以防止有人犯这样的逻辑错误。如果您知道自己在做什么,则可以禁用检查或执行诸如“MIN”、“GROUP_CONCAT(DISTINCT PostedDate) AS PostedDate”之类的操作,...

在这种情况下,您还可以使用 ANY_VALUE() , 它在该组中选择一个值。像这样使用它:

SELECT
    ANY_VALUE(myUsers.UserName) AS UserName,
    User_ID,
    COUNT(ForumPosts.Post) AS Posts
FROM myUsers
NATURAL JOIN ForumPosts
WHERE ForumPosts.PostDate = CURDATE()
GROUP BY User_ID;

关于mysql - SELECT 列表不在 GROUP BY 子句中且包含非聚合列;这与 sql_mode=only_full_group_by 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50947650/

相关文章:

javascript - jquery 座位表 PHP : store data price to mysql db

mysql - 将 MySQL key 对转换为串联列表

java - JPA 中的持久化上下文生命周期

MySQL Select - 数字时合并行

r - 如何使用 dplyr 创建总频率表

php - 使用 LAN 上不同 PC 上的同一个本地 MySQL 数据库

php - 使用 MATCH 和 AGAINST 从 MySQL 获取数据并限制结果以从相似名称的列中获取一个条目

java - 如何在注释中使用元素实现 idbag?

java - Spring Security 身份验证失败 : error org. hibernate.HibernateException:未找到当前线程的 session

mysql - 连接表 - 有点复杂