SQL сравнивает множество информации в столбце
Вопрос
Привет всем, мне трудно сформулировать это правильно, поэтому я не могу найти ответ в Интернете, поэтому лучшее, что я могу сделать, это привести пример. У меня есть следующая таблица базы данных:
ACTORNAME SERIESNAME
------------------------------ ------------
baldwin found
baldwin lost
baldwin rocks
baldwin sienfield
costelo friends
costelo prince
costelo remember
denzel friends
denzel prince
denzel remember
fox found
fox friends
fox prince
lopez found
lopez friends
lopez prince
lopez remember
pitt er
pitt everybody
pitt friends
pitt heroes
pitt rocks
smith friends
smith prince
smith remember
И я хотел бы использовать оператор SELECT, который бы захватывал имена актеров, которые играют во всех тех же сериях, в которых играет Смит. Таким образом, получающиеся имена актеров должны быть:
Костело, Дензел и Лопес
Я даже не уверен, какое ключевое слово использовать. Я смотрел на команду JOIN и также пробовал МИНУС, самые близкие, которые я мог получить, были имена актеров, которые играют точно в той же серии, в которой играет Смит (в этой ситуации Лопес не включен и ошибочен)
Вот еще одно объяснение:
suppose Smith acts in movies X and Y.
Suppose also that actor
A acts in movies X, Z
B acts in Y
C acts in X, Y, Z
D acts in X, Y
The answer to the query should be actors C and D.
Другими словами, вы должны вернуть тех актеров, чьи фильмы содержат фильмы актера Смита.
В поисках толчка в правильном направлении, Томек
Решение
К сожалению. Мой оригинальный ответ неправильно понимает ваши намерения. Попробуйте вместо этого:
select t2.actorname,
count(t2.seriesname)
from mytable t1
join mytable t2
on t1.seriesname=t2.seriesname and t1.actorname='smith' and t2.actorname <> 'smith' group by t2.actorname
having count(t2.seriesname)=(select count(seriesname) from mytable where actorname='smith')
Другие советы
SELECT DISTINCT ActorName
FROM dbo.MyTable
WHERE SeriesName IN (SELECT SeriesName FROM dbo.MyTable WHERE ActorName = 'smith');