In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'ynsl_new.u.user_id'; this is incompatible with sql_mode=only_full_group_byjava
一、原sql語句: mysql
SET @data_id='153f61e9727b450d8abbba5941e5085a'; SELECT u.*, GROUP_CONCAT(r.ROLE_CODE SEPARATOR ',') AS roleCode FROM tab_user u LEFT JOIN tab_user_role_relation ur ON ur.user_id = u.user_id LEFT JOIN tab_role r ON r.role_id = ur.role_id WHERE u.delete_mark = 0 AND u.enable_mark = 1 AND u.data_id = @data_id
二、中文大概意思:sql
在不帶GROUP BY的聚合查詢中,選擇列表的表達式1包含未聚合的列「ynsl_new.u.user_id」;這與SQL_mode=only_full_group_by不兼容express
也就是說,mysql的sql_mode是only_full_group_by的時候,在不使用group by 而且select後面出現彙集函數的話,那麼全部被select的都應該是彙集函數,不然就會報錯;函數
三、出現的緣由: this
在MySQL5.7.5後,默認開啓了ONLY_FULL_GROUP_BY,因此致使了以前的一些SQL沒法正常執行,其實,是咱們的SQL不規範形成的,由於group by 以後,返回的一些數據是不肯定的,因此纔會出現這個錯誤。spa
一、關閉ONLY_FULL_GROUP_BYblog
在配置文件中,找到sql_mode,去掉only_full_group_byget
二、規範sql語句,使用group byit
SET @data_id='153f61e9727b450d8abbba5941e5085a'; SELECT u.*, GROUP_CONCAT(r.ROLE_CODE SEPARATOR ',') AS roleCode FROM tab_user u LEFT JOIN tab_user_role_relation ur ON ur.user_id = u.user_id LEFT JOIN tab_role r ON r.role_id = ur.role_id WHERE u.delete_mark = 0 AND u.enable_mark = 1 AND u.data_id = @data_id GROUP BY u.user_id ;