如何加入这些表格并使其发挥作用

时间:2019-10-10 13:06:07

标签: sql

我想加入表格的作者,论文和兴趣,但是,我不能不把结果搞砸而加入兴趣表。

我曾尝试加入兴趣表,但结果不起作用。

问题是-有些学者写了12篇以上的论文,还有一些 学者对标题中带有“数据库”一词的领域感兴趣。列出 满足这两个条件之一或全部的每位学者的学术编号。

关系- DEPARTMENT(deptnum,descrip,instname,deptname,state,postcode) 学术(acnum,deptnum *,famname,givename,缩写,标题) PAPER(panum,标题) 作者(panum *,acnum *) FIELD(fieldnum,id,title) INTEREST(fieldnum *,acnum *,descrip)

SELECT AU.ACNUM, COUNT(*)
FROM AUTHOR AU JOIN PAPER PA ON AU.PANUM = PA.PANUM -- JOIN INTEREST INT ON AU.ACNUM = INT.ACNUM THIS SCREWS UP THE RESULTS
WHERE AU.PANUM = PA.PANUM
HAVING COUNT(*) > 12
GROUP BY AU.ACNUM;

这是我到目前为止所拥有的,但是,如果我尝试将兴趣表加入AU,它只会弄乱结果,其中Count(*)将为数千,这显然是不对的

我希望所有发表超过12本书的作者都能得到一个结果,此外,如果他们对%database%感兴趣,那么也将它们包括在内

4 个答案:

答案 0 :(得分:0)

尝试一下。会起作用

 SELECT AU.ACNUM, fieldnum, COUNT(AU.ACNUM)
 FROM AUTHOR AU JOIN PAPER PA ON AU.PANUM = PA.PANUM 
left join INTEREST INT ON AU.ACNUM = INT.ACNUM 
GROUP BY AU.ACNUM, fieldnum
HAVING COUNT(AU.ACNUM) > 12

答案 1 :(得分:0)

这些是不同维度上的独立条件。我将过滤放在where子句中:

select a.*
from academic a
where exists (select 1
              from interest i
              where i.acnum = a.acnum and
                    i.descrip like '%database%'
             ) or
      (select count(*)
       from author au
       where au.acnum = a.acnum
      ) > 12;

答案 2 :(得分:0)

您可以尝试将作者与12篇以上的论文以及对%database%感兴趣的论文结合起来

SELECT AU.ACNUM, COUNT(*) from AUTHOR AU
JOIN PAPER PA ON AU.PANUM = PA.PANUM
HAVING COUNT(*)>12

UNION 

SELECT AU.ACNUM, COUNT(*) from AUTHOR AU
JOIN INTEREST INT ON AU.ACNUM = INT.ACNUM
WHERE INT.DESCRIP like '%database%'

这应该可以解决问题:) 联盟默认会删除重复项,您应该让每位作者一次获得其论文数

答案 3 :(得分:0)

select acnum
from author
group by acnum
having count(panum) >12 

UNION

(SELECT author.ACNUM
from AUTHOR JOIN INTEREST ON author.ACNUM = interest.ACNUM
WHERE lower(interest.DESCRIP) like '%database%');