在多对多关系中,如何选择集体拥有的记录

时间:2010-10-15 21:32:38

标签: sql mysql

我确定我在这里错过了正确的术语,但是对于这个例子,多对多的关系:

  

用户有很多书。许多用户都拥有一本书。

查看两位用户拥有的所有图书的最佳方法是什么?

现在我正在使用它:

SELECT * FROM books 
WHERE book_id IN 
    (SELECT book_id FROM user_has_book WHERE user_id = 'joe' AND book_id IN 
    (SELECT book_id FROM user_has_book WHERE user_id = 'frank'))

我知道这不是最好的方法 - 对吧?我正在使用MySQL

1 个答案:

答案 0 :(得分:1)

SELECT b.*
FROM books b
INNER JOIN
  (SELECT book_id, COUNT(*) as cnt 
  FROM user_has_book 
  WHERE user_id IN ('Frank', 'Joe')    
  GROUP BY book_id
  HAVING cnt=2)x ON (x.book_id = b.book_id)