报错情况
Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘a.text’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SQL语句
SELECT a.value as label,
a.text,
COUNT(sn.ID) as value
FROM (SELECT sdi.item_value AS "value",
sdi.item_text AS "text",
sdi.dict_id as dict_id
FROM sys_dict_item AS sdi
WHERE sdi.dict_id = (SELECT ab.id FROM sys_dict AS ab WHERE ab.dict_code = "abc")) AS a
left JOIN szpt_notes as sn ON a.value = sn.note_second_type
GROUP BY a.value
网上的解决方案
基本都是更改sql_mode,关闭only_full_group_by
1.查看sql_mode的开启情况
select @@session.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
2.关闭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';
但是数据库既然会对这个进行更新限制,那最好还是书写标准的SQL语句,更改数据库语句后的SQL:
SELECT a.value as label,
a.text,
COUNT(sn.ID) as value
FROM (SELECT sdi.item_value AS "value",
sdi.item_text AS "text",
sdi.dict_id as dict_id
FROM sys_dict_item AS sdi
WHERE sdi.dict_id = (SELECT ab.id FROM sys_dict AS ab WHERE ab.dict_code = "abc")) AS a
left JOIN szpt_notes as sn ON a.value = sn.type
GROUP BY a.value,a.text
在group by里面加上a.text即可解决此问题,无需更改sql_mode。