SQL-запрос не возвращает ожидаемых результатов (объединить 3 таблицы)

0

Я решаю проблему 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
Теги:

1 ответ

0
Лучший ответ

Вам нужно будет сделать что-то вроде этого...

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. То, что вы здесь делаете, - это подсчет всех фильмов с одним из доступных участников, а затем просмотр того, какой фильм указан дважды (количество участников). Любой фильм, который указан столько раз, сколько количество актеров - это тот, у кого есть все необходимые участники этого фильма.

  • 0
    Большое спасибо. Я также нахожу это решение очень интересным: 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 )

Ещё вопросы

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