У меня есть две таблицы: «фильмы» и «пользователи». Между ними существует отношение n:m, описывающее, какие фильмы смотрел пользователь. Это описано с помощью таблицы «просмотрено». Теперь я хочу узнать для данного пользователя все фильмы, которые он не видел. Мое текущее решение выглядит так:
SELECT *
FROM movies
WHERE movies.id NOT IN (
SELECT seen.movie_id
FROM seen
WHERE seen.user_id=123
)
Это работает нормально, но, похоже, не очень хорошо масштабируется. Есть ли лучший подход к этому?