sql – HAVING没有GROUP BY
>根据标准(!)SQL可能有以下可能:
>为了符合标准(如果还没有),应该做什么最小的变化? >它可以像MySQL中的预期那样工作,如果第一行的NumberOfPages有最大值. 选择 * 以下是标准书写的:
source 有人可以解释一下,为什么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其他答案中提到的条款. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |