在简化的租赁系统中,存在三个关系:
- 书籍:id,标题,描述
- 复制:id,book_id
- 预订:id、copy_id、rent_from、rent_until
每本书都有许多副本。如果客户租用一本书,则选择可用副本并创建相应的预订记录。
现在我的问题:客户选择一本书,他/她想租。系统需要检查在给定的租期内哪些副本可用。
查询可用副本的最优雅和最快的方法是什么?
基本上,一步一步将执行以下操作:
- 选择相应书籍的所有副本
- 选择那些副本的指定期间内的所有预订
- 检查哪些书籍的副本未包含在选定的预订中。如果包括所有副本,则该书在给定期间不可出租
第 3 步让我头疼。如何在 SQL 中做到这一点?我什至可以在一个优雅的查询中执行所有三个步骤吗?