WBS
Новичок
Сразу приведу пример. Есть таблица (actor_film), связывающая актеров (id_actor) и фильмы (id_film). Очевидно, один актер может сниматься во многих фильмах, а в одном фильме множество актеров. Требуется найти таких актеров, которые одновременно снимались в фильмах №1 и №2.
Я представляю 2 способа как это сделать:
1. Соединение таблицы самой с собой
SELECT R1.id_actor FROM actor_film R1, actor_film R2
WHERE R1.id_actor=R2.id_actor AND R1.id_film=1 AND R2.id_film=2
2. Пересечение запросов
SELECT id_actor FROM actor_film WHERE id_film=1
INTERSECT
SELECT id_actor FROM actor_film WHERE id_film=2
Оба способа недостаточно гибкие на мой взгляд, и при усложнении критерия выбора актеров (например, актер снимался в фильмах "(1 и 2) или (3 и 4)") использовать их не очень удобно.
Кто-нибудь может посоветовать более быстрое и красивое решение?
Я представляю 2 способа как это сделать:
1. Соединение таблицы самой с собой
SELECT R1.id_actor FROM actor_film R1, actor_film R2
WHERE R1.id_actor=R2.id_actor AND R1.id_film=1 AND R2.id_film=2
2. Пересечение запросов
SELECT id_actor FROM actor_film WHERE id_film=1
INTERSECT
SELECT id_actor FROM actor_film WHERE id_film=2
Оба способа недостаточно гибкие на мой взгляд, и при усложнении критерия выбора актеров (например, актер снимался в фильмах "(1 и 2) или (3 и 4)") использовать их не очень удобно.
Кто-нибудь может посоветовать более быстрое и красивое решение?