无法弄清楚如何在SQL中返回正确的值

时间:2019-10-11 13:50:00

标签: sql

DEPARTMENT(deptnum,descrip,instname,deptname,状态,邮政编码)

ACADEMIC(acnum,deptnum *,famname,givename,缩写,标题)

PAPER(panum,title)

作者(panum *,acnum *)

FIELD(fieldnum,id,title)

INTEREST(fieldnum *,acnum *,descrip)

我需要解决以下问题,

编写一个SQL查询以创建一个显示每个标题和姓氏的视图 学术论文以及他们撰写了多少篇论文。如果一个学者还没有写任何东西 论文,则应在论文名称旁边显示“ 0”。

还有

显示在其他方面与另一位学者合作过的学者列表 一张纸。在每行上列出每对学者。只列出他们的学术 数字。不要列出重复的对。 (例如56,113和113,56是重复对)。

对于第一个,这是我到目前为止所拥有的,

SELECT A.ACNUM, COUNT(*)
FROM ACADEMIC A JOIN AUTHOR AU ON A.ACNUM = AU.ACNUM JOIN PAPER PA ON AU.PANUM = PA.PANUM
WHERE AU.PANUM = PA.PANUM
GROUP BY A.ACNUM
ORDER BY A.ACNUM;

它成功地显示了所有撰写论文的学者,并输出了他们撰写的论文数量,但是,我似乎无法弄清楚如何输出那些还没有撰写论文的人。

在第二个问题上,我能够展示彼此合作的人,但是无法弄清楚如何制作他们,这就是我走了多远,它展示了一起合作的人。

select distinct a1.acnum, a2.acnum
from academic a1, author au1, academic a2, author au2
where a1.acnum=au1.acnum
and a2.acnum=au2.acnum
and au1.panum = au2.panum
and a1.acnum < a2.acnum
order by a1.acnum;

期望它输出所需的值

1 个答案:

答案 0 :(得分:0)

从不FROM子句中使用逗号。

这解决了第一个问题;您一次只能问一个问题。

您想要的是LEFT JOIN。另外,我认为您不需要PAPER表:

SELECT A.ACNUM, COUNT(AU.PANUM)
FROM ACADEMIC A LEFT JOIN
     AUTHOR AU
     ON A.ACNUM = AU.ACNUM 
GROUP BY A.ACNUM
ORDER BY A.ACNUM;