Подзапрос с несколькими условиями, ссылающимися на разные таблицы? - PullRequest
0 голосов
/ 29 ноября 2018

Я просматриваю учебники sqlzoo.net и пытаюсь обернуть голову вокруг подзапросов и JOIN.При этом я пытаюсь написать один и тот же код один раз с JOIN и один раз с подзапросами.Теперь мне интересно, могу ли я использовать подзапросы при наличии нескольких условий.

В настоящее время я работаю над вопросами 8 и 9 этой задачи. ;вверху сайта, на который я ссылаюсь, вы можете увидеть используемые таблицы.Мне удалось получить № 8 («Перечислите фильмы, в которых появился« Харрисон Форд »») правильно.

С JOIN:

SELECT m.title
FROM movie m
JOIN casting c ON c.movieid = m.id
JOIN actor a ON a.id = c.actorid
WHERE a.name = 'Harrison Ford'

С подзапросами:

SELECT title 
FROM movie
WHERE id IN (SELECT movieid FROM casting 
WHERE actorid IN (SELECT id FROM actor WHERE name = 'Harrison Ford'))

Вопрос 9 такой же, но добавляет еще одно условие: не только кинозвезда ХаррисонФорд, но он также не должен быть ведущим актером.Имена актеров хранятся в таблице «актер», информация о потенциальных / не ведущих ролях находится в таблице «кастинг»

Так что с JOIN я просто добавляю еще одно условие через AND:

SELECT title
FROM movie m
JOIN casting c ON c.movieid = m.id 
JOIN actor a ON a.id = c.actorid 
WHERE a.name = 'Harrison Ford' and c.ord != 1

Как бы я сделал это с подзапросами?

1 Ответ

0 голосов
/ 29 ноября 2018

Просто добавьте его в подзапрос:

SELECT title 
FROM movie
WHERE id IN (SELECT movieid FROM casting c
WHERE actorid IN (SELECT id FROM actor WHERE name = 'Harrison Ford') And c.ord != 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...