>根据标准(!)sql可能有以下可能:
>为了符合标准(如果还没有),应该做什么最小的变化?
>它可以像MysqL中的预期那样工作,如果第一行的NumberOfPages有最大值.
>为了符合标准(如果还没有),应该做什么最小的变化?
>它可以像MysqL中的预期那样工作,如果第一行的NumberOfPages有最大值.
选择 *
从书
HAVING NumberOfPages = MAX(NumberOfPages)
以下是标准书写的:
HAVING <search condition>
- Let G be the set consisting of every column referenced by a <column reference> contained in the <group by clause>.
- Each column reference directly contained in the <search condition> shall be one of the following:
- An unambiguous reference to a column that is functionally dependent on G.
- An outer reference.
有人可以解释一下,为什么it should be possible按照标准?
在MysqL中,它完美的工作.
解决方法
尽管有
Mimer Validator的结果,我不相信你的标准sql是有效的.
没有GROUP BY子句的HAVING子句在标准sql中是有效的(可以说是)有用的语法.因为它以一个一个一个表的形式操作,可以这么说,只有使用聚合函数才有意义.在你的例子中:
Book HAVING NumberOfPages = MAX(NumberOfPages)
是无效的,因为在考虑整个表时,NumberOfPages是指哪一行?同样,只有在SELECT子句中使用文字值才有意义.
考虑这个例子,这是有效的标准sql:
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
尽管没有DISTINCT关键字,查询永远不会返回多行.如果HAVING子句满足,那么结果将是一行,单列包含值’T'(表示我们有不同页数的书),否则结果将是空集,即零行与单个柱.
我认为查询在MysqL中没有错误的原因是由于在SELECT子句(标准行为是相反的方式)之后HAVING子句(逻辑上)成立的,因为隐式的GROUP BY其他答案中提到的条款.