在一个特定的查询错误结束后,我最近将Mysql从5.1迁移到5.7。 这是查询:
select count(*) COUNT_PRODUCTS from
(select d.ID, d.EAN, d.NAME, d.SAP_CATEGORY_ID, d.SAP_VENDOR_ID, d.RELEASE_DATE,
d.REMOVED_DATE, d.IS_DRAFT, d.DATA_STATE, d.gc, ATTRIBUTE_CODE AS ATTRIB_NAME, ATTRIBUTE_VALUE AS APP_STATUS from
(select b.ID, b.EAN, b.NAME, b.SAP_CATEGORY_ID, b.SAP_VENDOR_ID, b.RELEASE_DATE,
b.REMOVED_DATE, b.IS_DRAFT, b.DATA_STATE, group_concat(pl.LIFECYCLE_VALUE) gc from
(select a.ID, a.EAN, a.NAME, a.SAP_CATEGORY_ID, a.SAP_VENDOR_ID, a.RELEASE_DATE,
a.REMOVED_DATE, a.IS_DRAFT, a.DATA_STATE from
(select p.ID, p.EAN, p.NAME, p.SAP_CATEGORY_ID, p.SAP_VENDOR_ID, p.RELEASE_DATE,
p.REMOVED_DATE, p.IS_DRAFT, p.DATA_STATE from PRODUCTS as p order by p.EAN, p.IS_DRAFT) as a group by a.EAN )
as b left join PRODUCT_LIFECYCLE_STATES pl on pl.PRODUCT_ID = b.ID group by b.ID ) as d left join PRODUCT_ATTRIBUTE_VALUES
AS PRODAV ON ID=PRODAV.PRODUCT_ID AND PRODAV.ATTRIBUTE_VALUE_ID IN
(select ID from ATTRIBUTE_VALUES where ATTRIBUTE_CODE='APPROVED_ATTRIBUTES')
left join ATTRIBUTE_VALUES AS ATVALS ON PRODAV.ATTRIBUTE_VALUE_ID = ATVALS.ID AND ATVALS.ATTRIBUTE_CODE ='APPROVED_ATTRIBUTES'
ORDER BY d.SAP_CATEGORY_ID, d.NAME ) f
这是我收到的错误:
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'a.ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
我已经尝试过更改SQL_MODE,但是更改查询后,它不会返回任何输出并继续加载。
答案 0 :(得分:1)
要解决该错误,请连接到mysql服务器:
mysql -u root -p
执行显示sql_mode值的查询:
show variables like 'sql_mode';
在我面前显示:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
使用这些值复制字符串,删除“ ONLY_FULL_GROUP_BY”并执行查询:
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
根据此请求,我们禁用了“ ONLY_FULL_GROUP_BY”,此后将不会显示错误。
然后我们退出mysql:
exit
为使此错误以后不再出现,我们需要打开MySQL配置文件。例如,在文本编辑器nano中(Ctrl + X表示退出,y / n表示保存或取消更改):
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
我的文件中没有sql_mode =,因此在文件末尾插入了具有以前复制的值的行,从中删除了ONLY_FULL_GROUP_BY,在我的情况下,发生了以下情况:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重新启动mysql以应用更改:
sudo service mysql restart
应该做;)。
答案 1 :(得分:0)
您需要禁用ONLY_FULL_GROUP_BY
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));