SELECTリストがGROUPBY句になく、非集計列が含まれています…sql_mode = only_full_group_byと互換性がありません

135
Dhanu K 2017-01-27 19:27.

WAMPサーバーを搭載したWindowsPCでMySQL5.7.13を使用しているAM

ここで私の問題はこのクエリの実行中です

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

常にこのようなエラーが発生しています

SELECTリストの式#1はGROUP BY句になく、GROUPBY句の列に機能的に依存しない非集約列 '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 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+

17 answers

261
Dhanu K 2017-01-27 19:44.

この

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

このコマンドでMySQLのSQLモードを変更するだけで簡単に解決できます。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

これも私にとってはうまくいきます。私のプロジェクトにはこのようなクエリがたくさんあるので、これを使用しました。このSQLモードをonly_full_group_byに変更しました。

ありがとうございました... :-)

82
Tim Biegeleisen 2017-01-27 19:34.

MySQLのonly_full_group_byモードがオンになっている場合、を使用するときに厳密なANSISQLルールが適用されることを意味しますGROUP BY。クエリに関しては、これはGROUP BYproof_type列の場合、2つしか選択できないことを意味します。

  • proof_type列、または
  • 他の列の集計


他の列の「凝集」によって、私は、次のような集計関数を使用して、平均MIN()MAX()またはAVG()他のカラムと。したがって、あなたの場合、次のクエリが有効になります。

SELECT proof_type,
       MAX(id) AS max_id,
       MAX(some_col),
       MIN(some_other_col)
FROM tbl_customer_pod_uploads
WHERE load_id = '78' AND
      status = 'Active'
GROUP BY proof_type

GROUP BYSOで表示されるMySQLの質問の大部分は、厳密モードがオフになっているため、クエリは実行されていますが、結果が正しくありません。あなたの場合、クエリはまったく実行されないため、本当にやりたいことを考える必要があります。

注:ANSI SQLは、選択されGROUP BYている列に機能的に依存する列も含めることにより、選択できるものを拡張します。機能従属性の例は、テーブルの主キー列によるグループ化です。主キーはすべてのレコードで一意であることが保証されているため、他の列の値も決定されます。MySQLはこれを可能にするデータベースの1つです(SQL ServerとOracleはAFAIKを行いません)。

48
Rakesh Soni 2018-08-01 23:01.

任意の1つのソリューションを使用する

(1)PHPMyAdmin

phpMyAdminを使用している場合は、以下のスクリーンショットに記載されているように「sql_mode」設定を変更します。

「sqlmode」変数を編集し、値から「ONLY_FULL_GROUP_BY」テキストを削除します

(2)SQL /コマンドプロンプト 以下のコマンドを実行します。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

(3)SELECTを使用しないでください*

SELECTクエリで関連する列を使用します。関連するとは、「group by」句に含まれる列、または集計関数(MAX、MIN、SUM、COUNTなど)を持つ列を意味します。


重要な注意点

point(1)またはpoint(2)を使用して変更を加えても、永続的に設定されるわけではなく、再起動するたびに元に戻ります。

したがって、これを設定ファイル([mysqld]セクションの/etc/mysql/my.cnfなど)に設定して、MySQLの再起動後も変更が有効になるようにする必要があります。

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

変数名:sql_modeまたはsql-mode

21
Anand Huded 2019-09-04 20:19.

以下の方法で私の問題は解決しました:

Ubuntuで

タイプ: sudo vi /etc/mysql/my.cnf

Aと入力して挿入モードに入ります

最後の行で、2行のコードの下に貼り付けます。

[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

escと入力して、入力モードを終了します

Type :wq to save and close vim.

入力sudo service mysql restartしてMySQLを再起動します。

20
Anil Gupta 2017-08-30 08:17.

いくつかのコマンドでsql_mode = only_full_group_byを無効にでき ます。これは、ターミナルまたはMySqlIDEで試すことができます。

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';
12
Gullu Mutullu 2020-01-24 17:46.

Ubuntuでは

ステップ1:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

ステップ2:最後の行に移動し、以下を追加します

sql_mode = ""

ステップ3:保存

ステップ4:mysqlサーバーを再起動します。

9
ElliotMok 2017-10-19 21:58.

クエリがSQL92で有効であるためには、名前列を選択リストから省略するか、GROUPBY句で名前を付ける必要があります。

SQL99以降では、オプション機能T301ごとに、そのような非集計がGROUP BY列に機能的に依存している場合に許可されます。nameとcustidの間にこのような関係が存在する場合、クエリは有効です。これは、たとえば、顧客の主キーである場合です。

MySQL 5.7.5以降は、機能依存性の検出を実装しています。ONLY_FULL_GROUP_BY SQLモードが有効になっている場合(デフォルト)、MySQLは、selectリスト、HAVING条件、またはORDER BYリストが、GROUP BY句で名前が付けられておらず、それらに機能的に依存していない非集約列を参照しているクエリを拒否します。 。

MySQL経由:: MySQL5.7リファレンスマニュアル:: 12.19.3MySQLによるGROUPBYの処理

次のコマンドでSQLモードを変更することで解決できます。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

そして...データベースを再接続することを忘れないでください!!!

5
fajr abd el ali 2020-04-24 07:32.

phpmyadminに移動し、コンソールを開いてこのリクエストを実行します

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
4
siva.picky 2020-02-01 04:01.

こんにちは、すべての列を取得する代わりに、を使用して必要なものを取得しますANY_VALUE(column_name)。それは完全に機能しています。確認してください。

例えば:

SELECT proof_type,any_value("customer_name") as customer_name
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
3
Mr_Bull 2020-02-03 21:42.

PhpMyAdminを使用している場合は、「SQLモード」を検索し、値を削除します:ONLY_FULL_GROUP_BY、実行しただけで問題ありません。

3
Sundar 2020-04-28 05:55.
> sudo nano /etc/mysql/my.cnf

以下に入力してください

[mysqld]
sql_mode = ""

Ctrl + O => Y = Ctrl + X

> sudo service mysql restart
2
jkkenzie 2017-11-13 19:07.

見た目からすると、複数の列/フィールドでグループ化しても結果に悪影響はないと思います。次のようにしてグループに追加してみませんか。

GROUP BY `proof_type`, `id`

これはproof_type最初にグループ化され、次にid。これで結果が変わらないことを願っています。場合によっては、複数の列でグループ化すると間違った結果が得られます。

1
PrafulPravin 2019-06-26 07:59.
  1. phpMyAdminにログインします
  2. 移動先:サーバー:localhost:3306データベースを選択しない
  3. トップメニューから変数をクリックします
  4. 「SQLモード」を検索し、対応する値を次のように編集します:NO_ENGINE_SUBSTITUTION

それで全部です。

私はEc2でこれを行い、それは魅力のように機能しました。

1
Nelson Bwogora 2020-05-06 06:40.

これは、永続的に設定するための非常に高速で簡単な方法です。

注意:実行SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); は一時的なものであり、サーバーを再起動してもエラーが発生します。これを恒久的に修正するには、以下を実行します

  1. rootとしてサーバーにログインします
  2. ターミナルで実行 wget https://gist.githubusercontent.com/nfourtythree/90fb8ef5eeafdf478f522720314c60bd/raw/disable-strict-mode.sh
  3. を実行してスクリプトを実行可能にします chmod +x disable-strict-mode.sh
  4. を実行してスクリプトを実行します ./disable-strict-mode.sh

そして、完了したら、mysqlに変更が加えられ、再起動されます

0
Gautam 2020-01-12 05:17.

MySQL8.0のアップデート

ここで説明したように削除されているため、あなたsql-modeは持っNO_AUTO_CREATE_USERていません-how-to-set-sql-mode-in-my-cnf-in-mysql-8

[mysqld]
sql-mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

また、誰かがmy.cnfファイルを持っていない場合は、に新しいファイルを作成して/etc/my.cnfから、上記の行を追加します。

0
Shoshinmas 2020-10-17 07:12.

データベースの一部が壊れるという同様の問題がありました。私がしたことは、次のようにPHPStormデータベースコンソールを介してDBのパラメーターを変更したことです。

   SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

今は魅力のように機能します

0
Ahmad Mobaraki 2020-11-18 23:16.

only_full_group_by自分が何をしているのかがわかっている場合にのみオフにしてください。

問題を示す簡単な例:

表:ユーザー

 id   |  name
----------------
  1      ali
  2      john
  3      ali

あなたが使用している場合GROUP BYname、列:

SELECT * FROM users GROUP BY name;

2つの可能な結果があります:

  1      ali
  2      john     

または

  2      john
  3      ali

MYSQLはどの結果を選択するかを知りません!は異なりますidが、両方にがありname=aliます。

解決策1:

nameフィールドの選択のみ:

SELECT name FROM users GROUP BY name;

結果:

  ali
  john     

解決策2:

オフにするonly_full_group_by。MYSQLは、以前にランダムに示した2つの可能な結果のうちの1つを示します。(何idを選択するかを本当に気にしなくても大丈夫です)

Solution3

使用Aggregateのような関数をMIN()MAX()それが選択する必要がありますかを決めるために、ヘルプMYSQLに。

たとえば、最小値が必要idです。

SELECT MIN(id), name FROM users GROUP BY name;

結果:

  1      ali
  2      john     

ali最小の行を選択しますid

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ジョー・バロウロー対ウェイド事件の転覆に対応するNFLは、言葉を言わないことで、腹立たしいが予測可能なPRの結果でした。

別の日、別のヒンジのないLIV記者会見

別の日、別のヒンジのないLIV記者会見

(lから)パット・ペレス、ブルックス・ケプカ、パトリック・リードサウジアラビアのLIVゴルフリーグのさらに別の信じられないほどの記者会見で、スポーツのファンはブルックス・ケプカからでたらめな吐き気と質問回避の驚異的なマスタークラスを受けました。パトリックリード、ブライソンデシャンボー、パットペレス、最近のPGAツアーの脱北者。

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

レッドダガーとマーベルさんがチームを組んでいます。

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

暗号業界最大の沈没船の1つであるスリーアローズキャピタルは、ついにその悲惨さから解放されています。火曜日に、不良債権ヘッジファンドは、債権者からの返済を要求する訴訟の高まりに応えて、バージンアイランド裁判所によって清算を命じられました彼らが3ACに行ったローン。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Suffragettes Indicam #3: Junho

Suffragettes Indicam #3: Junho

Mais um mês se findando — e metade do ano de 2022 já passou. Sabe o que isso significa? Não, não é hora de verificar se você está cumprindo com suas resoluções de Ano Novo.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

メインネットガイド— Arbitrum Odyssey Week 2

メインネットガイド— Arbitrum Odyssey Week 2

最新のアップデートを受け取るために私たちに従ってください。ニュースレター:https://www。

Language