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

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

DDD
DDDオリジナル
2025-01-25 03:02:10370ブラウズ

How to Resolve MySQL's

MySQL 5.7 の only_full_group_by エラー: 詳細な説明と解決策

MySQL 5.7 で「SELECT リストの式 #1 が GROUP BY 句にありません」および「only_full_group_by」エラーが発生すると、混乱を招くことがあります。この記事は、この問題に光を当て、解決策を提供することを目的としています。

問題分析

MySQL 5.7 より前のバージョンでは、グループ内でこれらの列の値が異なる場合でも、GROUP BY 句に現れない列を SELECT リストに含めることができました。ただし、バージョン 5.7 では、これらの列が集計されている場合にのみこれを許可するようにデフォルトの動作が変更されました。これは、「only_full_group_by」モードによって強制されます。

問題は解決しました

このエラーは、クエリの SELECT リストに、GROUP BY 句の列に機能的な依存関係がない未集計の列が含まれていることを示します。この問題を解決するには、未集計の列を削除するか、GROUP BY 句に追加します。

推奨される解決策

この特定のクエリでは、「group_id」列を GROUP BY 句に追加して、すべての非集計列が 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_id,
  g.group_name
HAVING
  COUNT(d.user_id) > 0
ORDER BY
  g.group_name</code>

その他の注意事項

複数テーブルのクエリでは、推奨される解決策で示されているように、テーブル名またはエイリアスで列名を修飾することが最善です。

「only_full_group_by」をオフにすることはお勧めできません。非集計列を任意に選択できるため、一貫性のない予測不可能な結果が生じる可能性があります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。