select列表不在GROUPBY子句中,包含非聚集列;这与sql\u mode=only\u full\u group by不兼容

xyhw6mcr  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(362)

这是我使用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','')); 但是错误又回来了。我想要永久的解决办法。有人能对此提出建议吗?

vsaztqbk

vsaztqbk1#

想象一个存储论坛帖子的表。您可以存储文章本身、文章的日期以及发布它的用户。
当你这样做的时候:

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

我们都知道你想要什么。数据库会说“用户id?是 啊。在分组依据之后必须是唯一的。帖子是按组聚合的,但是我该怎么处理postedate呢?我该还哪一个。在这种情况下,它将是唯一的,但是如果where子句不检查确切的“postedate”,而是检查一个范围(例如),则语句不会定义应该返回哪个值。
安全模式下的这个设置可以防止某人犯这样的逻辑错误。如果您知道自己在做什么,可以禁用检查或执行类似“min”、“group\u concat(distinct postedate)as postedate”之类的操作,。。。
在这种情况下,还可以使用任意的\u 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;
uqdfh47h

uqdfh47h2#

尝试添加 invite_id 在你的询问结束时让它说 GROUP BY job,invite_id"); 你需要小组里的所有东西,所以这是我现在的假设
全线:

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

相关问题