

下記のSQLを実行すると、以下のメッセージが表示されました。  
foods テーブルには id (primary key) があります。

**表示されたメッセージ:**

[code]

    Expression #13 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'kondate.foods_ingredients.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    Expression #13 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'kondate.foods_ingredients.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    
[/code]

**SQLクエリ:**

[code]

    select * from `foods`  left join `foods_ingredients` on `foods`.`id` = `foods_ingredients`.`food_id` left join
    `ingredients` on `foods_ingredients`.`ingredient_id` = `ingredients`.`id` left join `ingredients_allegies` on
    `foods_ingredients`.`ingredient_id` = `ingredients_allegies`.`allegy_id` where (`category_type_id` = 4) and
    `ingredients_allegies`.`allegy_id` not in (5) and `event_month` is null group by `foods`.`id`
    
[/code]


CC BY-SA 4.0
2022-07-03T09:46:16.477
89737
2022-07-04T02:48:08.437
2022-07-04T02:48:08.437
3060
45215
question
mysql
カラムがあるのに、group by で該当のカラムが存在しないかのようなエラーが出る


エラーの英語を読み違えているようです。

foods.idがないというエラーではなくて、  
「SELECTの列にGroupByで集約されていないカラム（'kondate.foods_ingredients.id' ）があります。」  
というエラーです。

集約しているのに抽出する際に集約していない列を表示しようとしている。  
具体的にいうと  
「`foods`.`id`」で集約していますが、SELECTでは「*」と全部表示しようとしています。  
例えば'foods_ingredients.id'は何が表示されるべきがテーブル側は判断できません。

基本的に集約の際にSELECTに列挙できる項目は集約しているカラム（ここでは`foods`.`id`）もしくは[集約関数](https://dev.mysql.com/doc/refman/5.6/ja/group-
by-functions.html)を利用することになります。

改めて集約してどういったテーブルを表示するかを考えてSQLを組み立ててみてください。


CC BY-SA 4.0
2022-07-04T01:37:28.653
89748
2022-07-04T01:37:28.653
22665
89737
answer