GROUP BY なしの HAVING: 標準 SQL 準拠
質問に示されているクエリ構造:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
標準 SQL に従った有効性に関する懸念。クエリでは、対応する GROUP BY 句のない HAVING 句が使用されています。
標準 SQL では、検索条件が特定の基準を満たす場合に HAVING 句が有効であると定義されています。これらの基準には、GROUP BY 句で参照される列に機能的に依存していること、または外部参照であることが含まれます。
指定されたクエリには GROUP BY 句がありません。したがって、特定のグループに対する NumberOfPages の明確な機能依存関係がないため、検索条件 NumberOfPages = MAX(NumberOfPages) は定義された基準を満たしません。
標準に準拠するには、クエリを次のようにする必要があります。次のような GROUP BY 句を含めるように変更されました。
SELECT * FROM Book GROUP BY BookId HAVING NumberOfPages = MAX(NumberOfPages)
この改訂されたクエリでは、GROUP BY 句が使用されます。 BookId ごとにデータを分割し、書籍ごとに個別のグループを作成します。 HAVING 句は、これらのグループに対して動作し、グループに最大 NumberOfPages の行が含まれているかどうかをチェックするため、有効になります。
MySQL などの一部のデータベース システムでは、このようなクエリを許可しない場合があることに注意することが重要です。 GROUP BY 句ですが、この動作は非標準の拡張とみなされます。
以上がGROUP BY 標準 SQL を使用せずに HAVING を使用することはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。