SQL错误:'database.table.field不在GROUP BY中

时间:2015-01-10 16:48:24

标签: mysql group-by

我在安装第三方软件时遇到此问题。我已阅读相关主题,并且所有人都建议将sql_mode设置为空字符串(SET sql_mode = ''),但该解决方案对我不起作用。仍然得到同样的错误。我需要在配置文件中设置这个吗?

这是一些有用的信息;

Server version: 5.6.15-56-log Percona Server (GPL), Release rel63.0, Revision 519

mysql> SHOW VARIABLES LIKE 'sql_mode';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode      |       |
+---------------+-------+
1 row in set (0.00 sec)

错误消息的失败查询是;

mySQL query error: SELECT MAX(e.entry_id) as max, MAX(e.entry_date) as maxdate,b.blog_id, b.blog_name, b.blog_seo_name FROM blog_entries e  LEFT JOIN blog_blogs b ON ( b.blog_id=e.blog_id )   WHERE e.entry_status='published' AND e.entry_banish=0 AND e.entry_featured=0 AND b.blog_view_level='public' AND b.blog_disabled=0 GROUP BY e.blog_id, b.blog_name, b.blog_seo_name ORDER BY maxdate DESC LIMIT 0,50

SQL error: 'db_name_ipb.b.blog_id' isn't in GROUP BY
SQL error code: 1055

有什么想法吗?

更新

不幸的是,代码已加密,因此无法尝试您的建议。另外 - 如上所述 - 更改SQL模式并没有解决我的问题。如果是开发,我会继续调查并更新问题。

2 个答案:

答案 0 :(得分:0)

您正在选择b.blog_id并按e.blog_id分组。这就是问题所在。

SELECT MAX(e.entry_id) as max, MAX(e.entry_date) as maxdate,b.blog_id, b.blog_name, b.blog_seo_name 
FROM blog_entries e  LEFT JOIN 
     blog_blogs b ON ( b.blog_id=e.blog_id )   
WHERE e.entry_status='published' AND e.entry_banish=0 AND e.entry_featured=0 
     AND b.blog_view_level='public' AND b.blog_disabled=0 
GROUP BY b.blog_id, b.blog_name, b.blog_seo_name 
ORDER BY maxdate DESC LIMIT 0,50

答案 1 :(得分:0)

这是您的查询:

SELECT MAX(e.entry_id) as max, MAX(e.entry_date) as maxdate, b.blog_id, b.blog_name, b.blog_seo_name
FROM blog_entries e LEFT JOIN
     blog_blogs b
     ON b.blog_id = e.blog_id
WHERE e.entry_status = 'published' AND e.entry_banish = 0 AND
      e.entry_featured = 0 AND b.blog_view_level='public' AND
      b.blog_disabled=0
GROUP BY e.blog_id, b.blog_name, b.blog_seo_name
ORDER BY maxdate DESC
LIMIT 0,50;

e.blog_idgroup by b.blog_id select left join inner join。你应该选择其中一个。

注意:where只能是binner join表格{{1}}中的条件无论如何都会将其变为{{1}}。

注意:MySQL通常不强制执行此操作。您的环境必须设置ONLY_FULL_GROUP_BY模式,因此您的SQL模式不包含任何内容是非常可疑的。有关设置SQL模式的更多信息是here