Я уверен, что здесь отсутствует правильная терминология, но для этого примера отношение "многие ко многим":
У пользователя много книг. Книга принадлежит многим пользователям.
Какой лучший способ увидеть все книги, принадлежащие обоим двум пользователям?
Сейчас я просто использую это:
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
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)