这是我使用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;

我们都知道你想要什么。数据库会说“用户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/

10-09 00:51