SQL采访-如何使用多个表获取记录(如果没有记录或计数为零)

桑杰·M

我面试了,下面是问题。下表如下

表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,也可能没有记录。
例如

  1. “ Book3”的总副本数为0。输出应包括“ Book3”
  2. “ Book1”和“ Book2”的总份数分别为7和2。“ Book1”和“ Book2”均不应显示
  3. 在“ Book_Copies”中没有Book4和Book5的条目,因此两者都应包含在输出中

回家后,经过多次试验,我写了下面的查询:)

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 

该查询可以正常工作并经过正确测试。
有什么办法可以改善这个查询?例如复杂性,性能等。
如果我们可以改进它,那么如果您提供优化的查询和原因将很有帮助。谢谢

维涅什·库马尔(Vignesh Kumar A)

试试这个

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果没有记录计数,则显示零-ORACLE SQL查询

SQL多个表,如果没有记录则显示

如何交付AWS采访任务

关于SQL分组的采访问题

在SQL中联接多个表后如何计数记录

零和一的游戏(Google采访)

如果找不到记录,SQL查询将返回零计数

SQL Server 2008如何从多个表中获取最高记录

如何获取sql中的记录计数

SQL:返回分页记录并获取所有记录的计数

如果没有ID记录,SQL Server合并语句将返回零

获取SQL Server查询以返回零个记录,而不是单个空记录,以汇总没有分组依据?

SQL Server:如何首次找到字段为X的记录,以后没有该字段的记录

获取没有记录的天数Oracle SQL

如何获取记录日期明智的降序,然后给没有日期的记录-在SQL中

如何从SQL表中删除多个记录

SQL,没有零库存记录的库存移动

以最优化的方式从sql server表中获取记录计数

如何使用linq2sql将记录插入到具有多个文件的多个表中

SQL获取为空的记录的ID,并且没有其他记录具有相同ID的值吗?

采访任务:使用令牌限制并发请求数

每月获取记录,但如果该月没有记录,则也获取零

Oracle SQL - 没有计数结果时返回日期记录

SQL-如何选择没有明细记录的主记录?

sql表设计以获取具有多个包含和排除条件的记录

如何从SQL获取记录

表A中没有表B中的SQL查找记录

SQL查询where子句如果没有匹配记录则忽略

SQL查询计数结果为零事件记录不存在