- 根据标准(!)SQL,以下可能吗?
- 为了符合标准(如果还没有),需要进行哪些最小的更改?
- 它在 MySQL 中按预期工作,当且仅当第一行具有最大值页数.
SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)
标准中写道:
HAVING <search condition>
- 令G 为由 中包含的 引用的每一列组成的集合。
- 中直接包含的每个列引用应为以下之一:
- 对功能上依赖于 G 的列的明确引用。
- 外部参考。
source
有人能给我解释一下为什么吗应该有可能根据标准?
在 MySQL 中,它完美地工作。
尽管模仿者验证器结果,我不相信你的标准 SQL 是有效的。
A HAVING
没有a的子句GROUP BY
子句是标准 SQL 中有效且(可以说)有用的语法。因为它一次性对表表达式作为一个集合进行操作,所以可以说,只有使用聚合函数才真正有意义。在你的例子中:
Book HAVING NumberOfPages = MAX(NumberOfPages)
无效,因为在考虑整个表时,哪一行确实NumberOfPages
参考?同样,只有在SELECT
clause.
考虑这个例子,它是有效的标准 SQL:
SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
尽管没有DISTINCT
关键字,查询将永远不会返回多于一行。如果HAVING
子句满足,则结果将是包含值“T”的单行和单列(表示我们有不同页数的书籍),否则结果将是空集,即零行和单列。
我认为 mySQL 中查询不出错的原因是由于专有扩展导致HAVING
子句(逻辑上)在以下之后出现SELECT
子句(标准行为是相反的),加上隐式的GROUP BY
其他答案中提到的条款。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)