検索

ホームページ  >  に質問  >  本文

SQL_MODE=only_full_group_by: SELECT リストは GROUP BY 句に含まれておらず、非集計列が含まれています....互換性がありません

Windows PC で MySQL 5.7.13 と WAMP サーバーを使用しています

私の問題は、このクエリを実行するときです

リーリー

いつもこのエラーが発生します

SELECT リストの式 #1 は GROUP BY 句になく、非集計列 "returntr_prod.tbl_customer_pod_uploads.id" を含みますが、これは GROUP BY 句の列に機能的に依存していません。これは次のとおりです。 sql_mode=only_full_group_by 互換性がありません

最良の解決策を教えていただけますか?

この結果が必要です

リーリー


P粉850680329P粉850680329400日前638

全員に返信(2)返信します

  • P粉099000044

    P粉0990000442023-10-11 11:07:33

    MySql エンジンにはシステム変数 ONLY_FULL_GROUP_BY があります。

    Mysql バージョン 5.7.5 以降: ONLY_FULL_GROUP_BYSQL モードはデフォルトで有効になります

    バージョン 5.7.5 より前: ONLY_FULL_GROUP_BY はデフォルトでは有効になっていません。

    ONLY_FULL_GROUP_BY SQL モードが有効になっている場合 (バージョン 5.7.5 以降はデフォルトで有効になっています)、MySQL は選択リスト、HAVING 条件、または ORDER BY## を拒否します。 # リスト GROUP BY 句で名前が指定されておらず、機能的にもそれらに依存していない非集計列を指します。

    問題を解決するには、いずれかの解決策 (以下の 3 つのうち 1 つ) を使用してください。

    (1) PHPMyAdmin

    無効化

    : ONLY_FULL_GROUP_BY モード phpMyAdmin を使用している場合は、以下のスクリーンショットに示すように

    sql_mode 設定を変更します。 編集

    SQLモード

    変数を値から削除ONLY_FULL_GROUP_BYText ######または######

    (2) SQL/コマンドプロンプト

    Disable

    : 次のコマンドを実行して、ONLY_FULL_GROUP_BY モードを無効にします。

    リーリー ######または######

    (3) SELECT *

    は使用しないでください。

    ONLY_FULL_GROUP_BY

    モードを無効にしないでください。ただし、 SELECT クエリで関連列を使用します。関連とは、

    group by

    句に現れる列、または集計関数 (MAXMIN

    SUM

    ) を含む列を意味します。 COUNT など) ######重要###### point(1) OR point(2) を使用して行われた変更は永続的に設定されず、再起動するたびに復元されます。 したがって、変更が MySQL の再起動後も持続するように、設定ファイル (例: [mysqld]<代码> セクションの /etc/mysql/my.cnf

    ) に設定する必要があります。効果:###

    設定ファイル:/etc/mysql/my.cnf

    変数名

    :

    sql_mode OR sql-mode

    値から ONLY_FULL_GROUP_BY

    という単語を削除し、ファイルを保存します。

    : 構成ファイル内に sql_mode 変数が見つからない場合は、ファイルの最後に次の 2 行を挿入してください リーリー

    返事
    0
  • P粉909476457

    P粉9094764572023-10-11 00:45:13

    ###これ###

    この問題は、このコマンド

    を使用して MySQL の SQL モードを変更することで簡単に解決できます。 リーリー

    これは私にも効果があります.. 私のプロジェクトにはこのようなクエリがたくさんあったため、これを使用しました。そのため、このSQLスキーマをonly_full_group_by

    に変更しました。

    または、SELECT ステートメントで指定された GROUP BY 句にすべての列のみを含めます。 sql_mode は有効のままにすることができます。

    ###ありがとう...:-)###

    更新日: 2023 年 7 月 14 日

    SQL スキーマの変更は 1 つの解決策ですが、構造化クエリ言語のベスト プラクティスは、すべての (SELECT * ...) 列の選択を避け、代わりにグループ化された列に対して @Tim Biegeeisen のような集計関数を使用することです。
    https://stackoverflow.com/a/41887524/3602846

    以下の回答で言及されています

    返事
    0
  • キャンセル返事