我面试了,下面是问题。下表如下
表1:书籍(BookId是主键)
BookId | Book_Title
1 | Book1
2 | Book2
3 | Book3
4 | Book4
5 | Book5
表2:书本副本
BookId | BranchId | No_of_copies
1 1 2
1 2 5
2 1 0
2 2 2
2 3 0
3 1 0
3 2 0
输出应列出所有没有库存的所有书籍,如下所示。
输出:
Book_Title
---------
Book3
Book4
Book5
请注意,有两种可能性。“ Book_Copies”表中的“ No_of_copies”可能为0,也可能没有记录。
例如
回家后,经过多次试验,我写了下面的查询:)
select B.Book_Title
from
(
select BC.BookId, sum(BC.No_of_copies) as 'No of copies'
from Book_Copies BC
group by BC.BookId
having sum(BC.No_of_copies) = 0
union
select B.BookId, BC.No_of_copies
from Book B
left outer join Book_Copies BC on B.BookId = BC.BookId
where BC.BookId is null
)
as BookIds_withNoStock
inner join Book B on B.BookId = BookIds_withNoStock.BookId
该查询可以正常工作并经过正确测试。
有什么办法可以改善这个查询?例如复杂性,性能等。
如果我们可以改进它,那么如果您提供优化的查询和原因将很有帮助。谢谢
试试这个
SELECT B.Book_Title
From Book B LEFT JOIN book_copies BC ON B.Bookid = BC.Bookid
Group By B.Book_Title
Having SUM(ISNULL(BC.no_of_copies,0)) = 0
输出:
BOOK_TITLE
Book3
Book4
Book5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句