SQL查询需要从两个单独的表中获取信息
我正在尝试创建一个查询,该查询将列出同一作者的所有书籍。大多数列表中只有一位作者的一本书,但我希望在db中列出多本书的作者为该作者显示这些书 我有两张桌子:SQL查询需要从两个单独的表中获取信息,sql,oracle,join,count,Sql,Oracle,Join,Count,我正在尝试创建一个查询,该查询将列出同一作者的所有书籍。大多数列表中只有一位作者的一本书,但我希望在db中列出多本书的作者为该作者显示这些书 我有两张桌子: 书籍-作者、书名等 作者-作者、作者姓名、作者姓名 我希望结果按AuthLName排序,报告由数据库中具有相同authorid的任何书籍组成 需要的示例结果: AUTHORID BKTITLE AUTHFNAME AUTHLNAME --------- ----------------- ---------
- 书籍-
等作者、书名
- 作者-
作者、作者姓名、作者姓名
AuthLName
排序,报告由数据库中具有相同authorid
的任何书籍组成
需要的示例结果:
AUTHORID BKTITLE AUTHFNAME AUTHLNAME
--------- ----------------- ------------ -----------
504 KNIGHT FREEDOM Chris Feehan
504 KNIGHT SHOWDOWN Chris Feehan
目前,我有以下代码:
select AUTHORID, BKTITLE
from BOOK
where AUTHORID in
(select AUTHORID from
(select AUTHORID,
count(*) as BOOK_COUNT
from BOOK
group by AUTHORid
order by AUTHORid )
where BOOK_COUNT >= 2);
其中:
AUTHORID BKTITLE
---------- --------------------
504 KNIGHT FREEDOM
504 KNIGHT SHOWDOWN
我需要找到一种从Author表中获取信息的方法,并将其添加到此中。这应该可以:
SELECT b.AUTHORID, b.BKTITLE, a.AUTHFNAME, a.AUTHLNAME
FROM BOOK b
INNER JOIN AUTHOR a
ON b.AUTHORID = a.AUTHORID
AND b.AUTHORID IN
(
SELECT AUTHORID
FROM BOOK
GROUP BY AUTHORID
HAVING COUNT(AUTHORID) > 1
)
ORDER BY a.AUTHLNAME, a.AUTHFNAME
如何-更新为使用CTE(公共表表达式)首先确定哪些作者在数据库表
book
中有多本书,然后仅列出这些作者及其书籍:
;WITH AuthorsWithMoreThanOneBook AS
(
SELECT AUTHORID, BOOK_COUNT = COUNT(*)
FROM BOOK
GROUP BY AUTHORID
HAVING BOOK_COUNT > 1)
)
SELECT
b.AUTHORID, b.BKTITLE, a.AuthFName, a.AuthLName
FROM
BOOK b
INNER JOIN
AUTHOR a ON b.AuthorID = a.AuthorID
INNER JOIN
AuthorsWithMoreThanOneBook A2 ON a.AuthorID = A2.AuthorID
ORDER BY
a.AuthLName, a.AuthFName
更新:好的,您正在使用Oracle。。。。不确定(很久没用过了)-但您不能像这样扩展原始查询吗:
select bk.AUTHORID, bk.BKTITLE, a.AUTHORFNAME, a.AUTHORLNAME
from BOOK AS bk
INNER JOIN AUTHOR AS a ON a.AUTHORID = bk.AUTHORID
where bk.AUTHORID in
(select AUTHORID from
(select AUTHORID,
count(*) as BOOK_COUNT
from BOOK
group by AUTHORid
order by AUTHORid )
where BOOK_COUNT >= 2);
不确定Oracle是否/如何支持这些表别名(
BOOK AS bk
)-但我很确定它确实以某种方式支持这些别名…您只需对每个表进行一次访问即可:
SELECT * FROM
(
SELECT AuthorID, BkTitle, AuthFName, AuthLName
,COUNT(*) OVER (PARTITION BY AuthorID)
AS c
FROM BOOK
JOIN AUTHOR USING (AuthorID)
)
WHERE c > 1;
我想也许OP的意思是将查询限制在拥有多本书的作者身上?但不确定。它列出了所有列,但也列出了所有书籍。我只想列出同一作者的那些书。举个例子:AUTHORID BKTITLE AUTHFNAME AUTHLNAME 512暗影卡梅隆DEAN 587骑士王子DARYLL DEANLOP 504骑士决战CHRISTINE FEEHAN 504骑士自由CHRISTINE FEEHAN唯一的书应该是列出的是504的作者,因为数据库中有多个,无法正确格式化。但作者id 504在数据库中有两本书。所以我只想把这两本书列出来,因为所有其他作者只有一本书db@ReneCanter:更新了我的答案,以找出使用CTE的不止一本书的作者(适用于许多RDBMS-很遗憾,您没有提到您使用的是哪一本),谢谢您的帮助!!不知道为什么它仍然出错。奥德确实列出了一些有用的东西。我真的很感激你的帮助!!!你们是最好的:-)这也列出了数据库中的所有书籍。“我只希望在多本书上列出作者的那些书显示出来。@Reneconter-Answer更新为只包括有作者或多本书的书。”。