我有一个基于库系统的数据库,我正在努力增强我对MYSQL查询的了解。 我想尝试列出借用了数据库中所有书名的借款人的名字。
我需要删除的请求是
SELECT b.BorName
FROM Borrower b
JOIN Loan l ON l.BorId = b.BorId
JOIN BookCopy bc ON bc.BcId = l.BcId
JOIN BookTitle bt ON bt.BtId = bc.BtId
我想我需要使用bt.BtName
这是上面查询中每本书的名称以及子查询SELECT bt.BtName FROM BookTitle bt
但是我没有任何文字或查询来执行此操作整个清单。
我需要将第一个表与第二个查询中的每一行进行比较,但尚未找到方法。
答案 0 :(得分:1)
在收集独特的借用者 - 标题组合(使用DISTINCT
)后,您可以使用GROUP BY
和HAVING
识别那些书帖数量相当于现有书签总数的借款人:
SELECT BorName FROM (
SELECT DISTINCT b.BorName, bt.BtId
FROM Borrower b
JOIN Loan l ON l.BorId = b.BorId
JOIN BookCopy bc ON bc.BcId = l.BcId
JOIN BookTitle bt ON bt.BtId = bc.BtId
) borrowers_titles
GROUP BY BorName
HAVING Count(*) IN (SELECT Count(*) FROM BookTitle)
答案 1 :(得分:0)
怎么样:
SELECT b.BorName, bt.BtName
FROM loan as l
LEFT JOIN Borrower as b
ON l.BorId = b.BorID
LEFT JOIN BookCopy as bc
ON bc.BcId = l.BcId
LEFT JOIN BookTitle as bt
ON bt.BtId = bc.BtId
GROUP BY b.BorName
它可以获取所有借用的名字和书籍,分组(或按订购)借款人的名字。 现在听起来好像你想要借阅图书馆里每本书的人的名字?如果是这样的话:
SELECT b.BorName
Borrower as b
WHERE
(SELECT count(distinct BtId) FROM BookTitle) =
(SELECT count(distinct bc.BcID) FROM BookCopy as bc WHERE bc.BorID = b.BorID)