0
0

sql_mode=only_full_group_byとは?

Posted at

Mysql2::Error: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sample_test.parent.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (ActiveRecord::StatementInvalid)

Mysql2::Error: SELECT リストの式 #1 が GROUP BY 節になく、GROUP BY 節の列に機能的に依存しない非集約列 'sample_test.parent.id' を含んでいます。
これは sql_mode=only_full_group_by (ActiveRecord::StatementInvalid) と互換性がありません。

出典 deepl

自分の訳

SELECTの表現リストはGROUP BY節はありません。そしてGROUP BY句において非集計のカラムparentテーブルのidはカラムの機能上の従属関係がないカラム'sample_test.parent.id'を含んでいます
これはsql_mode=only_full_group_byと両立し難い

Expression 表現(すること)、表われ、しるし、(言葉の)言い回し、語法、語句、辞句、(顔・目などの)表情、顔つき、表情豊かなこと
not in 不在にしております;席を外しております
functionally 機能上の
dependent 従属関係の、隷属的な、
incompatible 気性が合わない、相いれない、両立しがたい、(…と)両立しないで、矛盾して

出典 weblio

ql_mode=only_full_group_byとは?

MySQL は、関数従属性の検出を実装しています。 ONLY_FULL_GROUP_BY SQL モードが有効な場合 (デフォルト)、MySQL は、選択リスト、HAVING 条件または ORDER BY リストが GROUP BY 句で名前が付けられておらず、機能的に依存していない非集計カラムを参照するクエリーを拒否します。

選択リストの非集計 address カラムが GROUP BY 句で指定されていないため、ONLY_FULL_GROUP_BY が有効な場合、このクエリーは無効である可能性があります:
SELECT name, address, MAX(age) FROM t GROUP BY name;
このクエリーは、name が t の主キーであるか、一意の NOT NULL カラムである場合に有効です。 このような場合、MySQL は、選択されたカラムが機能的にグループ化カラムに依存していることを認識します。 たとえば、name が主キーの場合、各グループには主キーの値が 1 つのみであるため、その値によって address の値が決まります。 そのため、グループ内の address 値の選択にランダム性はなく、クエリーを拒否する必要はありません。
name が t の主キーまたは一意の NOT NULL カラムでない場合、クエリーは無効です。 この場合、関数従属性を推測できず、エラーが発生します:

mysql> SELECT name, address, MAX(age) FROM t GROUP BY name;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP
BY clause and contains nonaggregated column 'mydb.t.address' which
is not functionally dependent on columns in GROUP BY clause; this
is incompatible with sql_mode=only_full_group_by

感想

group byするときはselectにも列を含めなければならない。
あと英語がズタボロ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0