返回包含另一个表中不存在的ID的所有行

时间:2016-11-21 07:28:50

标签: sql postgresql

我在表Book中有一个行实体,比如Library。我还有一个表Borrowings,其中的行代表Borrowing实体。

Book有一个主键,在Borrowing行中用于将图书标记为在字段book_id中借用的图书。可以有0-n Borrowing行可以连接到单个Book

  • 如果特定图书没有Borrowing行,则Book可用。
  • 如果特定图书有1-n Borrowing行且return_date小于当前日期,则Book可用。
  • 将来只有Borrowingreturn_date。如果存在此Book,则会借用Borrowing,但读者无法使用。{/ li>

我的问题是 - 如何找到所有可借用的图书,因为它们符合上述任何标准?

  • 没有引用其ID的Borrowing行。
  • 将来没有return_dateSlice

1 个答案:

答案 0 :(得分:0)

尝试以下查询

SELECT *
FROM library l
LEFT JOIN borrowing b 
 ON l.book_id = b.book_id
WHERE (b.book_id IS NULL
     OR NOW()::date - b.return_date::date > 0) 

希望这可以帮助你。