かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

MySQL GROUP BYしたらエラーになった

お久しぶりのMySQL
MySQLで重複してるデータを取ろうとしました。

SELECT * FROM table_a
GROUP BY name
HAVING COUNT(*) >= 2;

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.table_a.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

MySQL 5.7からデフォルトでONLY_FULL_GROUP_BYオプションがONになっており、GROUP BYするデータだけを取ってきなさいよ。という事でGROUP BYで使っているカラム以外もSELECTしているとエラーになるというもののようです。(MySQL 5.7から...ずいぶんSQL文かいてなかったのがバレますネ...)

一部のカラムでGROUP BYして、全部のデータを取ってきたいなら、GROUP BYしたデータサブクエリにしてWHEREの条件にすればOKっぽいです。

SELECT * FROM table_a
WHERE name in (
  SELECT name FROM table_a
  GROUP BY name
  HAVING COUNT(*) >= 2
);

SQL文長くなりましたが、nameカラムが重複してるレコードのカラム全部を表示することができました!
ONLY_FULL_GROUP_BYオプションをOFFにする方法もあるようですが、何かしら理由あっての事だと思うので慣れたいと思います。


[参考]

これからはじめる MySQL入門

これからはじめる MySQL入門