Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.


mysql 5がインストールされています.7、groupbyでクエリーするときに次の異常を放出します.
Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.t_long.user_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

理由:
MySQL 5.7.5とupは機能依存の検出を実現した.only_が有効になっている場合full_group_by SQLモード(デフォルトではそうです)では、MySQLは、機能的に依存するのではなく、グループ内の名前のない非集約カラムを参照するリスト、条件、または順序リスト参照のクエリーの選択を拒否します.(5.7.5以前はMySQLで機能依存が検出されておらず、only_full_group_byはデフォルトでは有効になっていません.前の5.7.5動作の説明については、MySQL 5.6リファレンスマニュアルを参照してください.)
sql_を表示するには、次のコマンドを実行します.modeの内容.
mysql> SHOW SESSION VARIABLES;
mysql> SHOW GLOBAL VARIABLES;
mysql> select @@sql_mode;

セッションとglobalの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説明:only_full_group_by:これを使うのはoracleと同じグループルールを使うことです.selectの列はグループの中にあるか、それ自体が集約列(SUM、AVG、MAX、MIN)でなければなりません.実はこの配置は今のところ個人的な感覚とdistinctの差が少ないので、削除すればいいのです.公式サイト抜粋:ONLY_FULL_GROUP_BY  Reject queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on (uniquely determined by) GROUP BY columns.
As of MySQL 5.7.5, the default SQL mode includes ONLY_FULL_GROUP_BY. (Before 5.7.5, MySQL does not detect functional dependency and ONLY_FULL_GROUP_BY is not enabled by default. For a description of pre-5.7.5 behavior, see the MySQL 5.6 Reference Manual.)
A MySQL extension to standard SQL permits references in the HAVING clause to aliased expressions in the select list. Before MySQL 5.7.5, enabling ONLY_FULL_GROUP_BY disables this extension, thus requiring the HAVING clause to be written using unaliased expressions. As of MySQL 5.7.5, this restriction is lifted so that the HAVING clause can refer to aliases regardless of whether ONLY_FULL_GROUP_BY is enabled.
解決:
次の2つのコマンドを実行します.
mysql> set global 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> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

この2つのコマンドは、sqlを削除します.modeのONLY_FULL_GROUP_BY
他の記事を参照してください:mysqlプロファイルを直接変更します(私のシステムはUbuntu 16.04です./etc/mysql/mysql.conf.d/mysqld.cnfにはsql_modeという構成はありませんので、直接追加すればいいです.他のシステムが変更されている場合は追加しなくてもいいです)
この方法はしばらく式がない.
mysql構成情報の読み出し順序.
①ps aux|grep mysql|grep ‘my.cnf’
②mysql –help|grep ‘my.cnf’
/etc/my.cnf,/etc/mysql/my.cnf,/usr/local/etc/my.cnf, ~/.my.cnfこれらはmysqlのデフォルトでmyを検索します.cnfのディレクトリは、順番前の優先です.mysqlは上の順序でプロファイルをロードし、後のプロファイルが前のプロファイルを上書きします.
ファイルがない場合は、ファイルをカスタマイズできます.次に、デフォルトの読み出し構成の内容に戻ります)どの構成ファイルを変更する必要があるかを確認します.私には/etc/myしかありません.cnfはこのファイルのみを修正すればよい
プロファイルmy.cnfは通常、[client],[mysqld],[mysql]などいくつかの部分に分けられる.MySQLプログラムは、通常、サーバmysqldが[mysqld]セグメントの関連する構成項目を読み出すなど、同名のセグメント部分を読み出す.コンフィギュレーション・アイテムの場所が正しくない場合、コンフィギュレーションは有効になりません.
参照先:https://stackoverflow.com/questions/37951742/1055-expression-of-select-list-is-not-in-group-by-clause-and-contains-nonaggr
この文は試したことがないので、先に記録します.
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は正常にsqlを実行することができる.
補足説明
1、以上のsqlが修正を実行した後、sqlのセッション接続を切断してから有効になります.つまり、生産中であれば、プロジェクトを再起動してから正常になります.2、windowsのmsyqlサービスが再オープンすると、sqlの設定がクリアされ、プロファイルの構成が必要になります.私の参考構成は以下の通りです.
[mysql]

#  mysql        

default-character-set=utf8mb4

[mysqld]

#  sqlmode           
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

#  3306  

port = 3306 

#  mysql     

basedir=E:\DevTools\mysql-5.7.25-winx64

#  mysql           

datadir=E:\DevTools\mysql-5.7.25-winx64\data

#       

max_connections=200

#            8     latin1   

character-set-server=utf8

#               

explicit_defaults_for_timestamp=true

default-storage-engine=INNODB 

変換元:https://www.cnblogs.com/jpfss/p/10401753.html