首页 > 解决方案 > 无法弄清楚如何在 SQL 中返回正确的值

问题描述

部门(部门编号,描述,instname,部门名称,州,邮政编码)

学术(acnum,deptnum*,famname,givenname,首字母,title)

论文(panum,标题)

作者(panum*,acnum*)

字段(字段编号,ID,标题)

兴趣(fieldnum*,acnum*,描述)

我需要解决以下问题,

编写一个 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;

期望它输出所需的值

标签: sql

解决方案


切勿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;

推荐阅读