SQL comparar conjunto de informações em uma coluna
Pergunta
Olá a todos, estou tendo uma redacção momento difícil isso corretamente que é por isso que estou tendo dificuldades para encontrar uma resposta online, por isso o melhor que posso fazer é dar um exemplo. Eu tenho o banco de dados tabela seguinte:
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
E eu gostaria de usar uma instrução SELECT que iria pegar os actornames que o jogo em todos da mesma série que Smith interpreta em Então os actornames resultantes devem ser:.
Costelo, Denzel, e Lopez
Eu não estou mesmo certo que palavra-chave para uso. Eu estava olhando para o comando JOIN e também tentou MINUS, o mais próximo que eu poderia obter foram actornames que desempenham exactamente nas mesmas séries que Smith interpreta (nessa situação, lopez não está incluído e é errado)
Aqui está outra explicação:
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.
Em outras palavras, você tem que devolver os atores cujos conjunto de filmes contêm os de ator Smith.
À procura de um empurrão na direção certa, Tomek
Solução
Sorry. Minha resposta original misunderstodd sua intenção. Tente isto em vez disso:
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')
Outras dicas
SELECT DISTINCT ActorName
FROM dbo.MyTable
WHERE SeriesName IN (SELECT SeriesName FROM dbo.MyTable WHERE ActorName = 'smith');