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;
期望它输出所需的值
答案 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;