加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – HAVING没有GROUP BY

发布时间:2020-12-12 16:19:41 所属栏目:MsSql教程 来源:网络整理
导读:根据标准(!)SQL可能有以下可能: 为了符合标准(如果还没有),应该做什么最小的变化? 它可以像MySQL中的预期那样工作,如果第一行的NumberOfPages有最大值. 选择 * 从书 HAVING NumberOfPages = MAX(NumberOfPages) 以下是标准书写的: HAVING search conditio
>根据标准(!)SQL可能有以下可能:
>为了符合标准(如果还没有),应该做什么最小的变化?
>它可以像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:
    1. An unambiguous reference to a column that is functionally dependent on G.
    2. An outer reference.

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其他答案中提到的条款.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读