HAVING without GROUP BY:标准 SQL 一致性
问题中呈现的查询结构:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
引发担心其根据标准 SQL 的有效性。该查询使用 HAVING 子句,但没有相应的 GROUP BY 子句。
标准 SQL 定义,如果 HAVING 子句的搜索条件满足特定条件,则 HAVING 子句有效。这些条件包括在功能上依赖于 GROUP BY 子句中引用的列或外部引用。
在给定的查询中,没有 GROUP BY 子句。因此,搜索条件 NumberOfPages = MAX(NumberOfPages) 不满足定义的条件,因为 NumberOfPages 对任何特定组没有明确的函数依赖性。
为了符合标准,查询需要修改为包含 GROUP BY 子句,例如:
SELECT * FROM Book GROUP BY BookId HAVING NumberOfPages = MAX(NumberOfPages)
在此修改后的查询中,GROUP BY 子句对数据进行分区通过 BookId,为每本书创建不同的组。 HAVING 子句现在变得有效,因为它对这些组进行操作,检查是否有任何组包含具有最大 NumberOfPages 的行。
需要注意的是,某些数据库系统(例如 MySQL)可能允许此类查询,而无需GROUP BY 子句,但此行为被视为非标准扩展。
以上是使用HAVING而不使用GROUP BY是标准SQL吗?的详细内容。更多信息请关注PHP中文网其他相关文章!