MySQL 5.7 の only_full_group_by
モード: トラブルシューティングと解決策
MySQL 5.7 にアップグレードすると、多くの場合 only_full_group_by
エラーが発生します。これは、SELECT
ステートメントに、GROUP BY
句に含まれていない非集計列が含まれている場合に発生します。 この重要な機能を無効にする代わりに (これは強くお勧めしません)、効果的な解決策を検討してみましょう:
問題:
古い MySQL バージョンでは正しく機能していたクエリが 5.7 では失敗し、SELECT
リスト内の非集計列が機能的に GROUP BY
列に依存していないことを示すエラーが生成される場合があります。
推奨される解決策:
GROUP BY
に非集計列を含める: 最も簡単な解決策は、多くの場合、SELECT
リストの非集計列を GROUP BY
句に追加することです。 これにより、各グループがそれらの列の値を一意に定義できるようになります。 例:
<code class="language-sql">GROUP BY group_name, group_id</code>
集計関数を使用する: 結果に非集計列が必要でもグループ化が必要な場合は、集計関数 (MIN()
、MAX()
、AVG()
、SUM()
、) それらの列に。これにより、グループごとに 1 つの結果が得られます。 例:COUNT()
<code class="language-sql">SELECT group_id AS 'value', group_name AS 'text', COUNT(*) AS 'count' FROM mod_users_groups LEFT JOIN mod_users_data ON group_id = mod_users_data.group_id WHERE ... GROUP BY group_name, group_id</code>
列を明示的に修飾する: 特に結合を伴うクエリでは、常に列をテーブル名またはエイリアスで修飾します。これにより、各列がどのテーブルに属しているのかが明確になり、あいまいさがなくなります。
<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 ... GROUP BY g.group_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
エラーを解決し、MySQL 5.7 の強化された SQL 標準準拠を遵守しながらデータの整合性を維持できます。 only_full_group_by
を無効にしないでください。これは、予期しない、または間違っている可能性のあるクエリ結果を防ぐための重要な機能です。only_full_group_by
以上がMySQL の「only_full_group_by」エラーを解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。