- 締切済み
MysqlのONLY_FULL_GROUP_BY
MySQLの5.7.9でONLY_FULL_GROUP_BYを有効にしています。 3つのテーブル(a, b, m) を結合して以下のようにgroup byした際、with rollupを付けるとエラーになります。rollup なしでは通ります。これは正しい挙動でしょうか。 select a.aid, a.name, b.bid, sum(m.value) from a inner join b on a.aid = b.aid inner join m on m.bid = b.bid group by a.aid, b.bid a.aid, b.bid はいずれもprimary keyです。 with rollup時のエラーは"SELECT list is not in GROUP BY clause and contains nonaggregated column a.name functionally dependent on columns in GROUP BY clause"という内容ですが、a.nameはテーブルの定義上a.idによって一意に決まる値です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- h271015
- ベストアンサー率71% (62/87)
No1です。 > with rollupなしのgroup by --> エラーなし > with rollupありのgroup by --> エラー発生 申し訳ありません。 おっしゃられるとおりONLY_FULL_GROUP_BYが有効なら上記2つのパターンのどちらの場合でもエラーになってしまう気がしますが、この動作が正常なのかはまだ判断できませんでした(明確な回答になっておらず申し訳ありません)。
- h271015
- ベストアンサー率71% (62/87)
正しい動作のように思います。 https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html MySQLのGROUP BY句では名前が指定されていない非集約カラムを参照できないように仕様拡張されていますが、with rollupもこの範囲に含まれているように思え、ONLY_FULL_GROUP_BY SQLモードが有効な場合はその仕様拡張機能が無効になるため、記載いただいたようなSQLはエラーとなるのではないかと思います。
補足
ありがとうございます。 理解できているか怪しいのですが、ご説明の内容は with rollupの有無によらずエラーになる、ということではないのでしょうか。起きている事象は、 with rollupなしのgroup by --> エラーなし with rollupありのgroup by --> エラー発生 なのですが、正しい動作でしょうか。