无法将GROUP BY与MySQL中的联接查询一起使用



我需要执行下面的查询,但无法执行。

SELECT * 
FROM (SELECT * 
FROM rider_status 
order by created_date DESC) as riderActice 
INNER JOIN rider_user ON rider_userId = rider_user.id 
Where rider_user.isActive = 1 
AND online_status = 1 
GROUP by rider_userId

错误:"#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'riderActice.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"

我读了一些博客,找到了下面的解决方案。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

但是在执行上述解决方案时,我遇到了另一个问题,那就是

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

如果我遗漏了什么或做错了什么,请告诉我

不能从表中选择所有列(*表示所有(并执行group by一列。这就是你出错的原因。如果列在select子句中,并且它不是聚合函数的一部分,那么它必须在groupby子句中。

此外,在连接两个表(子查询和一个表(时,请使用您创建的riderActice别名。

下面是一个小演示,演示我答案的第一部分。https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b10244e667e59ffb146170014dc69ba

如果你想选择所有列,那么这样做:

SELECT riderActice.rider_userId
, riderActice.created_date
, rider_user.id
, rider_user.isActive
, rider_user.online_status 
FROM rider_status as riderActice 
INNER JOIN rider_user ON riderActice.rider_userId = rider_user.id 
WHERE rider_user.isActive = 1 
AND rider_user.online_status = 1 
GROUP BY riderActice.rider_userId
, riderActice.created_date
, rider_user.id
, rider_user.isActive
, rider_user.online_status

如果你不想按每一列分组,那么向我们解释你需要什么,但这就是你问题的答案。

最新更新