MySQL only_full_group_by
エラー: 総合ガイド
MySQL 5.7 では only_full_group_by
SQL モードが導入され、次のようなエラーが発生しました:
<code>Expression #1 of SELECT list is not in GROUP BY clause and contains non-aggregated column 'support_desk.mod_users_groups.group_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by</code>
このエラーは、only_full_group_by
が、集計列を除く SELECT
リスト内のすべての列が GROUP BY
句にも出現する必要があるために発生します。 以前の MySQL バージョンではこれが強制されていなかったため、曖昧な結果が生じる可能性がありました。
解決策とトラブルシューティング
この問題に対処する方法は次のとおりです:
1. GROUP BY
に列を含めます:
最も簡単な修正は、問題のある列 (この例では group_id
) を GROUP BY
句に追加することです。
<code class="language-sql">... GROUP BY group_name, group_id ...</code>
2.集計または使用 ANY_VALUE()
:
各グループ内の非集計列の値が 1 つだけ必要な場合は、COUNT()
や SUM()
などの集計関数を使用します。 あるいは、ANY_VALUE()
はグループから任意の値を返します:
<code class="language-sql">SELECT ANY_VALUE(g.group_id) AS value, g.group_name AS text ...</code>
3. only_full_group_by
を無効にする (非推奨):
このモードを無効にすることもできますが、問題がある可能性のあるクエリがマスクされるため、一般的には推奨されません:
<code class="language-sql">SET sql_mode = 'only_full_group_by=OFF';</code>
ベストプラクティス
g.group_id
) で修飾します。 修正されたクエリは次のようになります:<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 ...</code>
group_id
と group_name
がそれぞれのグループ内で一意であることを確認します。これらの手順に従うことで、only_full_group_by
違反を効果的に解決し、より堅牢で予測可能な MySQL クエリを作成できます。
以上がMySQL の「only_full_group_by」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。