Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此SQL查询是否有问题_Sql_Join - Fatal编程技术网

此SQL查询是否有问题

此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

我不熟悉SQL查询,并试图更好地理解它。 关于下图,此SQL查询有效吗 给我的问题是:

对于斯蒂芬·金(Stephen King)撰写或合著的每本书,检索其名称为Central的图书馆分馆拥有的书名和副本数量

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'