SQL查询稍微复杂一点

时间:2015-05-25 02:18:47

标签: sql oracle-sqldeveloper

问题:撰写查询以查找作者的学者,并且只与同一州的研究人员共同撰写论文。列出他们的学号,姓名和姓氏。

我已经在这个问题上工作了一段时间,但我还没有想到一个正确的问题。

我需要使用的数据库(表格)模式:

ACADEMIC(ACNUM, DEPTNUM, FAMNAME, TITLE)
DEPARTMENT(DEPTNUM, STATE)
AUTHOR(PANUM, ACNUM)

作者表格内有1张PANUM(页码)的多个ACNUM(帐号)。

我尝试了计划,我能想到的就是这样:

需要循环通过作者表,

SELECT PANUM
FROM AUTHOR A

然后需要找到该论文的所有作者:

SELECT ACNUM
FROM AUTHOR B
WHERE PANUM = A.PANUM;

然后需要交叉所有状态:

SELECT DEPTNUM, TITLE, FAMNAME, UPPER(STATE)
FROM ACADEMIC C, DEPARTMENT D
WHERE C.ACNUM = B.ACNUM AND D.DEPTNUM = C.DEPTNUM;

你们能帮我解决一下这样的问题吗?我感谢任何帮助。

编辑:更多信息

我实际上并没有想出数百行数据。基本上,我必须通过以下方式查询数据库:从Author表中选择页码,然后查找Author表对该页码的所有帐号,然后使用我需要的所有这些帐号来确保它们都是在同一个州。例如。帐户100和101一起工作在第300页,两者都在州VIC,因此我会列出学术信息(famname,title和acnum)

1 个答案:

答案 0 :(得分:0)

您需要查询加入ACADEMICDEPARTMENTAUTHOR表的表格,然后自行加入该表格,限制在州,获得你想要的结果:

SELECT DISTINCT t1.FAMNAME, DISTINCT t1.TITLE FROM
(ACADEMIC a1 INNER JOIN DEPARTMENT d1 ON a1.DEPTNUM = d1.DEPTNUM
INNER JOIN AUTHOR auth1 ON a1.ACNUM = auth1.ACNUM) t1
INNER JOIN
(ACADEMIC a2 INNER JOIN DEPARTMENT d2 ON a2.DEPTNUM = d2.DEPTNUM
INNER JOIN AUTHOR auth2 ON a2.ACNUM = auth2.ACNUM) t2
GROUP BY t1.PANUM
HAVING COUNT(DISTINCT t2.STATE) = 1;