Вопрос об использовании DISTINCT при использовании подзапросов - PullRequest
0 голосов
/ 10 июля 2019

Итак, проблема дана: получите список актеров для фильма «Чужой».

Мой начальный код был:

select name
from actor
join casting
on actor.id=actorid where actorid in (
select actorid from casting join movie on movieid=id where title='alien')

Я получил ошибку, потому что каждый актер был указан несколько раз, Я решил это, выбрав DISTINCT имя, но я вроде не понимаю, почему было несколько списков актеров?Подзапрос дает только актеры ', которые указаны в таблице приведения, где movieid соответствует заголовку' Alien '.Таким образом, в этом запросе есть только один отдельный акторид.

1 Ответ

0 голосов
/ 10 июля 2019

Вы получаете несколько строк для каждого актера, потому что каждый актер снимается в нескольких фильмах (предположительно).Вы фильтруете по субъекту , но уже есть несколько строк.

Итак, вам не нужен внешний join:

select a.name
from actor a
where a.id in (select c.actorid
               from casting c join
                    movie m
                    on c.movieid = m.id 
               where m.title = 'alien'
              );

Вуаля!Без дубликатов и без select distinct.

Более важно:

  • Квалифицировать все ссылки на столбцы, особенно в запросе, который ссылается на несколько таблиц.
  • Используйте псевдонимы таблиц, чтобы проще было писать и читать запрос.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...