only_full_group_by
MySQL 5.7 のエラー
MySQL バージョン 5.7 では、only_full_group_by
モードが導入されました。このモードでは、SELECT
ステートメントで集計されていないすべてのカラムを GROUP BY
ステートメントに含める必要があります。このエラーは、クエリの SELECT
ステートメントに、GROUP BY
ステートメントに現れない未集計の列が含まれている場合に発生します。
この問題を解決するには 2 つの方法があります:
方法 1: 不足している列を GROUP BY
欠落している列 mod_users_groups.group_id
を GROUP BY
ステートメントに追加します:
<code class="language-sql">SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE g.active = 1 AND g.department_id = 1 AND g.manage_work_orders = 1 AND g.group_name != 'root' AND g.group_name != 'superuser' GROUP BY g.group_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
これにより、SELECT
ステートメントで集計されていないすべての列が GROUP BY
ステートメントに確実に含まれるようになり、エラーが排除されます。
方法 2: 集計関数を使用する
欠落している列がグループ化に関連していない場合は、選択する前に集計関数を使用してデータを要約することもできます。たとえば、group_name
が実際に一意である場合、mod_users_groups.group_id
を次の集計関数に置き換えることができます:
<code class="language-sql">MIN(mod_users_groups.group_id)</code>
これにより、一意の各 group_name
に対して最小の group_id
が返され、SELECT
ステートメントには集計列のみが含まれることが保証されます。
以上がmysql 5.7 `only_full_group_by`エラーを解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。