ホームページ > データベース > mysql チュートリアル > MySQL の「only_full_group_by」エラーを解決する方法?

MySQL の「only_full_group_by」エラーを解決する方法?

Patricia Arquette
リリース: 2025-01-25 03:11:08
オリジナル
890 人が閲覧しました

How to Resolve the MySQL

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_idgroup_name がそれぞれのグループ内で一意であることを確認します。

これらの手順に従うことで、only_full_group_by 違反を効果的に解決し、より堅牢で予測可能な MySQL クエリを作成できます。

以上がMySQL の「only_full_group_by」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート