此SQL查询是否有问题
我不熟悉SQL查询,并试图更好地理解它。 关于下图,此SQL查询有效吗 给我的问题是: 对于斯蒂芬·金(Stephen King)撰写或合著的每本书,检索其名称为Central的图书馆分馆拥有的书名和副本数量此SQL查询是否有问题,sql,join,Sql,Join,我不熟悉SQL查询,并试图更好地理解它。 关于下图,此SQL查询有效吗 给我的问题是: 对于斯蒂芬·金(Stephen King)撰写或合著的每本书,检索其名称为Central的图书馆分馆拥有的书名和副本数量 SELECT Title FROM BOOK WHERE BookID = ( SELECT BookID FROM BOOK_AUTHORS WHERE AuthorName = 'Stephen King' ) AND BookID = ( SELECT BookID, N
SELECT Title
FROM BOOK
WHERE BookID =
(
SELECT BookID
FROM BOOK_AUTHORS
WHERE AuthorName = 'Stephen King'
)
AND
BookID =
(
SELECT BookID, No_Of_Copies
FROM BOOK_COPIES
WHERE BranchID =
(
SELECT BranchID
FROM LIBRARY_BRANCH
WHERE BranchName = 'Central'
)
)
请使用下面的查询,但正确的方法是使用联接而不是多个子查询 加入 子查询
您的版本显然没有回答这个问题,因为它没有返回计数 处理此类问题的最常见方法是使用联接和分组方式:
注意左连接的用法。该问题似乎需要所有标题,即使是没有副本的标题。对于此要求,您可以使用连接来获得结果:
SELECT b.Title, bc.No_Of_Copies
FROM BOOK b
INNER JOIN BOOK_AUTHORS ba ON ba.BookId = b.BookId
INNER JOIN BOOK_COPIES bc ON bc.BookId = b.BookId
INNER JOIN LIBRARY_BRANCH lb ON lb.BranchId = bc.BranchId
WHERE ba.AuthorName = 'Stephen King' AND lb.BranchName = 'Central'
执行并检查是否达到预期结果。我没有设置任何环境,我们的讲师也没有告诉我们如何设置,我们应该凭直觉工作,我无法知道这是否有效,因为他没有回答我的问题,这是否正确,以及如果无效,如何修复。您只能在子选择中有一列,因此写入BookID=SELECT BookID,无副本将不起作用。。。您需要使用JOIN COUNT和GROUP By然后生成示例数据,否则您将无法测试您的查询请使用文本,而不是图像/链接作为文本。例如这里。但查询时不需要知道密钥。必要且充分的是了解每个表基和查询结果的含义,即其中的一行根据列值表示的业务情况。但当约束成立时,给定的结果将由更多的表达式返回。并告知自己重新使用该网站表示,代码问题需要一个解决方案。您还可以在sqlfiddle.com上测试它。你也可以通过谷歌“在线运行sql”。不需要分组,副本的数量已经在表BOOK\u copies中了
SELECT Title
FROM BOOK
WHERE BookID in
(
SELECT BookID
FROM BOOK_AUTHORS
WHERE AuthorName = 'Stephen King'
)
AND
BookID in
(
SELECT BookID
FROM BOOK_COPIES
WHERE BranchID in
(
SELECT BranchID
FROM LIBRARY_BRANCH
WHERE BranchName = 'Central'
)
);
SELECT b.Title, COUNT(lb.branch_id)
FROM BOOK_AUTHORS ba JOIN
BOOK b
ON ba.BookID = b.BookId LEFT JOIN
BANK_COPIES bc
ON ba.book_id = b.book_id LEFT JOIN
LIBRARY_BRANCH lb
ON lb.branch_id = bc.branch_id AND
lb.BranchName = 'Central'
WHERE ba.AuthorName = 'Stephen King'
GROUP BY ba.BookID, ba.Title;
SELECT b.Title, bc.No_Of_Copies
FROM BOOK b
INNER JOIN BOOK_AUTHORS ba ON ba.BookId = b.BookId
INNER JOIN BOOK_COPIES bc ON bc.BookId = b.BookId
INNER JOIN LIBRARY_BRANCH lb ON lb.BranchId = bc.BranchId
WHERE ba.AuthorName = 'Stephen King' AND lb.BranchName = 'Central'