В отношениях «многие ко многим», как можно выбрать записи, принадлежащие коллективно

0

Я уверен, что здесь отсутствует правильная терминология, но для этого примера отношение "многие ко многим":

У пользователя много книг. Книга принадлежит многим пользователям.

Какой лучший способ увидеть все книги, принадлежащие обоим двум пользователям?

Сейчас я просто использую это:

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

  • 0
    Какой бы путь вы ни выбрали, убедитесь, что вы проводите тестирование в своей системе, и проверьте план выполнения, если это возможно.
Теги:

1 ответ

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню