問題現象
在執行MySQL命令進行查詢時,提示如下錯誤:
1055(42000): SELECT list is not in GROUP BY clause and contains nonaggregated column原因與解決方案
該報錯主要是因為sql_mode參數被修改導致:
原因一:使用者修改sql_mode參數導致GROUP BY的文法不合規
原因二:業務側驅動程式修改sql_mode參數導致GROUP BY報錯
原因:業務側使用的驅動程式修改了
sql_mode參數值。例如,業務側使用的ADO.NET驅動程式修改了sql_mode參數值,導致GROUP BY報錯。
如上圖所示,當執行的INSERT語句需要返回自增列的值時,驅動程式會在執行INSERT語句前,自動修改當前會話上的sql_mode參數值,並且不會在INSERT語句執行完之後將sql_mode恢複為原參數值。如果當前會話被繼續使用,會導致後續執行包含GROUP BY的SELECT語句時出現報錯。解決方案:如果使用了ADO.NET驅動程式,需要使用者在驅動程式執行INSERT語句之後且執行查詢之前,在業務側代碼中,增加修改
sql_mode參數的語句(代碼如下),將sql_mode參數修改為預設值。SET session sql_mode = default;