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

「SELECT ステートメントの非集計列は GROUP BY 句に現れず、sql_mode=only_full_group_by と互換性がありません」

<p>Windows PC 上の WAMP サーバーで MySQL 5.7.13 を使用しています</p> <p>私の問題は、このクエリを実行するときです</p> <pre class="brush:php;toolbar:false;">SELECT * `tbl_customer_pod_uploads` から WHERE `load_id` = '78' AND `ステータス` = 'アクティブ' GROUP BY `proof_type`</pre> <p>いつもこのエラーが発生します</p> <ブロック引用> <p>SELECT リストの式 #1 は GROUP BY 句になく、非集計列 'returntr_prod.tbl_customer_pod_uploads.id' を含みますが、この列には GROUP BY 句の列に機能的な依存関係はありません。これは一貫しています。 sql_mode=only_full_group_by との互換性はありません</p> </blockquote> <p>最善の解決策を教えてください。 </p> <p>必要な結果は次のとおりです</p> <pre class="brush:php;toolbar:false;"> ---- --------- --------- --------- -- -------- ---------- ------------ --------------- ---- - --------- ------------ -------- -------------------- - ------------------------ | id | user_id |load_id | bill_id | latitude | langitude |proof_type | document_type | file_name | is_private | status | createdon | updatedon | ---- --------- --------- ------------- ---------- --------- ------------------------------------------------ ---- - -------- ------------------------ -------------- - ---- | 1 | 1 | 78 | 1 | 21.1212 | 21.5454 | 1 | 1 | id_Card.docx | 0 | アクティブ | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 | ---- --------- --------- ------------- ---------- --------- ------------------------------------------------ ---- - -------- ------------------------ -------------- - ---- </pre> <p><br /></p>
P粉034571623P粉034571623426日前493

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

  • P粉523625080

    P粉5236250802023-08-21 10:10:51

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

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

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

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

    この問題を解決するには、次の 3 つの解決策のいずれかを使用します

    (1) PHPMyAdmin

    無効化: ONLY_FULL_GROUP_BYモード

    phpMyAdmin を使用している場合は、以下のスクリーンショットに従って

    sql_mode 設定を変更します。

    編集

    SQLモード変数を値から削除ONLY_FULL_GROUP_BYText ######または######

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

    コマンド ONLY_FULL_GROUP_BY モードを実行して、

    を無効にします。

    リーリー ######または###### (3) SELECT *

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

    ONLY_FULL_GROUP_BY モードを無効にせず、代わりに SELECT

    クエリで関連列を使用します。関連列は、

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

    SUM) を持つ列を指します。 COUNT など) 列 重要なヒント ポイント (1) またはポイント (2) を使用して行われた変更は永続的な設定ではなく、再起動するたびに復元されます。

    したがって、これを構成ファイル (たとえば、
    /etc/mysql/my.cnf

    ファイルの [mysqld] セクション) で設定する必要があります。 MySQL 再起動後も変更を有効にするには:

    設定ファイル:

    /etc/mysql/my.cnf

    変数名:

    sql_mode

    または sql-mode

    値から ONLY_FULL_GROUP_BY という単語を削除し、ファイルを保存します。 :

    sql_mode

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

    返事
    0
  • P粉121081658

    P粉1210816582023-08-21 00:49:48

    この問題は、次のコマンドを使用して MySQL の SQL モードを変更するだけで解決できます。 リーリー

    それは私にも効果があります...

    この方法を使用したのは、プロジェクト内に同様のクエリが多数あるため、SQL モードをonly_full_group_by に変更しただけです。

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

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

    更新日: 2023年7月14日


    SQL スキーマの変更は回避策ですが、構造化クエリ言語のベスト プラクティスは、すべての (SELECT *...) 列の選択を避け、代わりにグループ化列で集計関数を使用することです。

    https://stackoverflow.com/a/41887524/3602846

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

    返事
    0
  • キャンセル返事