这是等于加了一个常量进去,与如下写法作用相同select au_id from authors where exists (select 'x' from sales having count(ord_num) >1 )

解决方案 »

  1.   

    为什么HAVING不和GROUP BY配对使用,而可单独使用?
      

  2.   

    有一点更正:
    这个库不是NORTHWIND 而是在PUBS库中
      

  3.   

    能够直接在主查询中单独用HAVING吗?
      

  4.   

    显示至少有一个订单的作者ID
    --------------------------------
    楼主给出的sql,不对吧!
    至少漏了一个关键的表:titleauthor(作品和作家的对应表)
      

  5.   

    select au_id  from authors a where exists(select * from titleauthor b ,sales c where a.au_id = b.au_id and b.title_id = c.title_id)
      

  6.   

    仁兄所言极是,你的文句结果是19条,我所给的语句结果是23条,也就是所有的作者都出来了。
    guohongchen(风) 兄说的也对
    select 'x' from sales having count(ord_num) >1 

    select au_id from sales having count(ord_num)>1 
    应该是一样的。当主查询的AU_ID确定后,在子查询中就成了一个确定的值,被当作常量对待了。
    而COUNT(ORD_NUM)是永远大于1的。
    不知这样理解对不对?
    谢谢诸位!!
      

  7.   

    我是这样理解的.因为Count()是聚合的,所以这里是不能用Where的,而只能用having.因为这个子查询是在EXISTS中的,所以也就是在子查询中已经包括了主查询的表authors
    也就可以直接写au_id,但是如果在sales也有一列叫au_id的话,那么你就必须写明是那个的.也正是因为这个子查询在EXISTS中所以不必GROUP BY 来进行分组
      

  8.   

    不会把,WHERE应该可以用的,和聚合函数无关
      

  9.   

    执行顺序:
    1.from子句组装来自不同数据源的数据
    2.where子句基于指定的条件对记录进行筛选
    3.group by子句将数据划分为多个分组
    4.使用聚集函数进行计算
    5.使用having子句筛选分组
    6.计算所有表达式
    7.使用order by对结果集进行排序这里用having是必须的
      

  10.   

    To:lh1979() 聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。