【发布时间】:2012-03-13 22:46:24
【问题描述】:
我在两个表之间有所有权关系,
说users(int user_id) 和user_books(int user_book_id,int user_id,int book_id)
以及另外两个表books(int book_id, varchar book_title, int author_id) 和authors (int author_id, varchar author_name)。
给定一个特定的user_id,我想获取用户没有的书,作者所写的书,他确实有他们写的其他书。
因此,如果用户有 BOOK1(即在user_books 中有一行)并且没有由与 BOOK1 相同的作者编写的 BOOK2 和 BOOK3,我想获取 BOOK2 和 BOOK3 的 ID。
我想我可以使用 SELECT WHERE NOT IN () 来做到这一点,但出于性能原因,我正在寻找基于连接的解决方案。
【问题讨论】:
-
你试过使用外连接吗?
-
正如我所说,我可以使用“select where not in”来写这个,但我想使用连接。我知道应该使用左连接以某种方式完成,但我不确定具体如何。
-
我也有一个问题,即某些用户可能已经拥有不止一个 user_book,因此加入会多次返回作者 ID。
-
我应该从查找“相关”作者的所有书籍开始吗?