これは機能的に GROUP BY 句の列に依存せず、sql_mod と互換性がありません。

mysql実行エラー:

SELECT リストの式 #2 は GROUP BY 句になく、GROUP BY 句の列に
機能的に依存しない非集約列 'bcdsystem.cities.city'を含んでいます。
これは
sql_mode=only_full_group_by と互換性がありません」

1. このエラーは、mysql バージョン 5.7 以降が表示される場合に発生します。

   mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY",这个配置严格执行了"SQL92标准"

2. SQL が実行されると、次の理由が発生します。

    简单来说就是:输出的结果是叫target list,就是select后面跟着的字段,还有一个地方group by column,就是

    group by后面跟着的字段。由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list 

    和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误。

3. 解決策
1) 一時的な解決策を講じることはできますが、mysql を再起動した後もこのエラーは報告されます。

バージョン番号を確認します: select version();

私のバージョンはバージョン 5.7 以降であることがわかります。
    ここに画像の説明を挿入

クエリモデル: SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode;

ここに画像の説明を挿入
mysql 設定に sql_mode="ONLY_FULL_GROUP_BY" が含まれていることがわかります。

次に、次の 4 つの SQL ステートメントを実行して問題を解決します ( mysql の再起動は失敗します)。

set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
 
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';
 
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';
 
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';

2) 最終的な解決策: MySQL 構成ファイルを変更する

Linux サービス上の docker を使用して mysql をインストールし、mysql コンテナに入り、/etc/mysql ディレクトリに入って my.cnf ファイルを変更しました。

vim /etc/mysql/my.cnf

[mysqld] の下にコードを追加します。

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[例外]
しかし、my.conf を cat した後、この設定ファイルには [mysqld] 項目がないことがわかり、設定ファイルには /etc/mysql/conf.d/、/etc/mysql/mysql が導入されていることがわかりました。両方のディレクトリにある conf.d/ ファイル

[mysqld] 設定を含むインポート ファイル mysql.conf.d フォルダーの下に mysqld.cnf ファイルがあることを確認した後、上記の設定を設定ファイルに追加し、保存して mysql コンテナーを再起動すると、問題は解決します。永久に。

ps: システムが異なれば、mysql 設定ファイルの名前とパスも異なります。
1. Mac または Linux ファイル /etc/my.cnf
2. Windows のデータベース インストール ディレクトリ内の my.ini

おすすめ

転載: blog.csdn.net/weixin_54514751/article/details/130505055