具有分组依据的嵌套子查询

时间:2014-04-04 20:57:03

标签: sql

遇到这个问题。在箭头处获取语法错误。我故意使用子查询。我想知道是否可以混合'where'和'have'?

;with books_not_ordered as
(
  select BK.book_id
  from bkinfo.books BK
  where BK.book_id not in
  (
    select OD.book_id
    from bkorders.order_details OD
  )  
)
select AU.author_id, AU.author_name_last
from bkinfo.authors AU
where exists
(
  select BAU.author_id, count(*) as NumBooks
  from bkinfo.book_authors BAU  
  group by BAU.author_id
  having count(*) > 1
  ==>where AU.author_id = BAU.author_id
  and
  BAU.book_id in
  (
    select BK.book_id
    from bkinfo.books BK
    where BK.book_id in
    (
      select cte.book_id
      from books_not_ordered cte
    )    
  )
)   
;
go

2 个答案:

答案 0 :(得分:2)

where子句应该出现在你的小组之前并且有

select BAU.author_id, count(*) as NumBooks
  from bkinfo.book_authors BAU  
  where AU.author_id = BAU.author_id
  group by BAU.author_id
  having count(*) > 1

答案 1 :(得分:0)

假设你正试图获得那些不在order_details表中,但却写过不止一本书的书籍的作者#34;以下查询应该有效。

SELECT AU.author_id, AU.author_name_last
FROM bkinfo.books BK
    JOIN bkinfo.book_authors BAU ON BAU.author_id = BK.author_id
    JOIN bkinfo.authors AU ON BAU.author_id = AU.author_id
    LEFT OUTER JOIN bkorders.order_details OD ON BK.book_id = OD.book_id
WHERE OD.book_id IS NULL
GROUP BY AU.author_id, AU.author_name_last
HAVING COUNT(BK.Book_id) > 1