Если вы count(distinct person_id)
, то вы получите 18013. Разумно, что имя не уникально. Что неразумно, так это указание на экзамене, согласно которому вы должны указывать только имя.
Один из способов правильно различать имена - выполнить это:
SELECT p.name
from people p
where p.id in (
select distinct s.person_id
from stars s join movies m on s.movie_id = m.id
WHERE m.year = 2004)
И если вы сделаете это таким образом тогда вам даже не нужен distinct
из-за определения оператора in
. Но вы, вероятно, получите один и тот же план выполнения независимо от этого.
На мой взгляд, можно перечислить p.name
несколько раз, если он принадлежит другому человеку. Написанный вами запрос был бы нормальным, если бы правило начиналось со следующих слов:
Если имя человека ...
вместо этих слов:
Если человек ...
Что мне что-то напоминает C. J. Дата сделал в классе один день. Он положил фольгу на свой проектор, который проецировал изображение дымящейся трубки на стене. Затем он спросил: что это?
- Труба, сказал один парень (вероятно, я).
- Изображение трубы, которое сказал другой парень.
- Наконец Кто-то сказал, что изображение трубы спроецировано на стену.
Поскольку это был класс базы данных, а не класс физики, никто не осмелился быть умным-а **.