sql - 无法弄清楚如何在 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;
期望它输出所需的值
解决方案
切勿在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;
推荐阅读
- python - 执行python脚本时保持窗口打开
- reactjs - 声明 useContext 时,错误:无效的钩子调用。Hooks 只能在函数组件的主体内部调用
- r - 如何使用列数据创建存在/不存在数据框?
- wordpress - 如何使用 ACF Pro 和 Woocommerce 为产品设置属性
- forms - 任何人都知道为什么 Select Required 不起作用
- vb.net - 如何将原始 json 数据发送到 vb.net 中的 put 方法?
- javascript - 使用 For 循环将多个文件上传到 Google Cloud Storage
- arrays - 如何在laravel中将字符串从redis缓存转换为json数组
- javascript - 如何在 typescript 中从 JSON 响应中以简写形式写出许多变量
- java - 如何通过多个处理程序处理 XML 事件的 InputStream 并使用 StAX 处理 Java 中的另一个输入流?