お久しぶりの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にする方法もあるようですが、何かしら理由あっての事だと思うので慣れたいと思います。
[参考]
- 作者: 小笠原種高
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/24
- メディア: 大型本
- この商品を含むブログを見る