Я решаю проблему Codewars на SQL, но я могу получить то, что я делаю
Учитывая, что таблицы film_actor и film из базы данных образцов DVD Rental содержат все фильмы как Sidney Crowe (actor_id = 105), так и Salma Nolte (actor_id = 122), объединяются вместе и упорядочивают набор результатов в алфавитном порядке.
Column | Type | Modifiers
------------+-----------------------------+----------
title | character varying(255) | not null
film_id | smallint | not null
Column | Type | Modifiers
------------+-----------------------------+----------
actor_id | smallint | not null
film_id | smallint | not null
last_update | timestamp without time zone | not null
Column | Type | Modifiers
------------+-----------------------------+----------
actor_id | integer | not null
first_name | character varying(45) | not null
last_name | character varying(45) | not null
last_update | timestamp without time zone | not null
Это результат, который я должен получить:
title
Antitrust Tomatoes
Clones Pinocchio
Oz Liaisons
Siege Madre
но я получаю это:
Title
Alaska Phantom
Alien Center
American Circus
Antitrust Tomatoes
Artist Coldblooded
Candidate Perdition
Clones Pinocchio
.....
Это мой запрос
select title from ( film
inner join film_actor on film.film_id=film_actor.film_id)
inner join actor on film_Actor.actor_id=actor.actor_id
where actor.actor_id=122 or actor.actor_id=105
Вам нужно будет сделать что-то вроде этого...
SELECT f.title
FROM film f INNER JOIN film_actor fa ON f.film_id = fa.film_id
WHERE fa.actor_id IN (105, 122)
GROUP BY f.title
HAVING COUNT(*) = 2
ORDER BY f.title
Счетчик (*) будет равен количеству участников, которые вам нужно сопоставить. Если вам нужно присоединиться к именам, вам также нужно добавить таблицу актеров, иначе id находится в таблице film_actor. То, что вы здесь делаете, - это подсчет всех фильмов с одним из доступных участников, а затем просмотр того, какой фильм указан дважды (количество участников). Любой фильм, который указан столько раз, сколько количество актеров - это тот, у кого есть все необходимые участники этого фильма.
select title from film where film_id in ( select film_id from film_actor where actor_id = 105 intersect select film_id from film_actor where actor_id = 122 )