SELECT ステートメントの列は GROUP BY 句に含まれておらず、非集計列が含まれています....sql_mode=only_full_group_by と互換性がありません
P粉521748211
P粉521748211 2023-08-21 13:21:31
0
2
487

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

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

SELECT * `tbl_customer_pod_uploads` から WHERE `load_id` = '78' AND `ステータス` = 'アクティブ' GROUP BY `proof_type`

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

<ブロック引用>

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

最善の解決策を教えてください。

必要な結果は次のとおりです

 ---- --------- --------- --------- -- -------- ---------- ------------ --------------- ---- - --------- ------------ -------- -------------------- - ------------------------ | 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 | ---- --------- --------- ------------- ---------- --------- ------------------------------------------------ ---- - -------- ------------------------ -------------- - ---- 


P粉521748211
P粉521748211

全員に返信 (2)
P粉300541798

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

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

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

ONLY_FULL_GROUP_BYSQL モードが有効になっている場合 (バージョン 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など) 列######重要######point(1) または point(2)を使用して行われた変更は永続的に設定されず、再起動するたびに復元されます。したがって、これを構成ファイル (たとえば、[mysqld]セクション/etc/mysql/my.cnf

) で設定して、MySQL が再起動しても変更が変わらないようにする必要があります。起動後に有効になります:

設定ファイル:

/etc/mysql/my.cnf

変数名

:sql_modeor

sql-mode

値からONLY_FULL_GROUP_BY

という単語を削除し、ファイルを保存します。:sql_mode変数が構成ファイル内に見つからない場合は、ファイルの最後に次の2行を挿入してください。 リーリー

いいねを押す+0
    P粉278379495

    ###これ###

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

    私にも効果があります... これを使用したのは、プロジェクトに同様のクエリが多数あったため、この SQL モードをonly_full_group_by

    に変更しただけです。

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

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

    更新日: 2023年7月14日

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

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

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

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!