0

我对内部查询有疑问

架构:

  • DEPARTMENT( deptnum , 描述, instname, deptname, state, postcode)
  • ACADEMICacnum、deptnum*、famname、givenname、首字母、头衔)
  • PAPER全景,标题)
  • AUTHOR( panum , acnum **)
  • FIELD字段编号,ID,标题)
  • INTEREST( fieldnum , acnum **, 描述)

我有这种格式的输出:

select 
    acnum, title, givename, famname
from  
    academic a 
where 
    a.acnum in (select count(*) as no_of_papers, acnum 
                from author auth 
                join paper p on auth.panum = p.panum
                group by acnum 
                having count(*) < 20)
union
select 
    acnum, title, givename, famname
from 
    academic a 
where 
    a.acnum not in (select count(*) as no_of_papers, acnum 
                    from author auth 
                    join paper p on auth.panum = p.panum
                    group by acnum);

但是,除了外部查询的 select 语句中的字段外,我还希望结果集中的count(*)as no_of_papers

我已经打破了我的头很长一段时间了。

4

2 回答 2

0

我认为您不需要工会:

select 
  a.acnum,
  MIN(a.title),  -- only 1 value anyways if acnum is a primary key
  MIN(a.givename),
  MIN(a.famname),
  count(p.panum) as no_of_papers
from academic a
left join author auth on a.acnum = auth.acnum
left join paper p on auth.panum = p.panum
group by a.acnum
having 1 = 1 -- ??? no_of_papers < 20 ???
;
于 2016-09-21T15:00:22.833 回答
0

使用加入

试试这样

SELECT acnum,title,givename,famname,no_of_papers
FROM academic a JOIN
( 
    SELECT COUNT(*) AS no_of_papers,acnum 
    FROM author auth JOIN paper p ON auth.panum=p.panum
    GROUP BY acnum HAVING COUNT(*)<20

)x ON 1 = 1
WHERE a.acnum IN (x.acnum)

UNION 

SELECT acnum,title,givename,famname,no_of_papers
FROM academic a 
(
    SELECT COUNT(*) AS no_of_papers,acnum 
    FROM author auth JOIN paper p ON auth.panum=p.panum
    GROUP BY acnum

 )y ON 1=1
WHERE a.acnum NOT IN (y.acnum)
于 2016-09-21T14:42:29.103 回答