SQL comparant un ensemble d'informations dans une colonne
Question
Bonjour à tous, j’ai du mal à bien formuler cela, c’est pourquoi j’ai du mal à trouver une réponse en ligne, je ne peux donc que donner un exemple. J'ai la table de base de données suivante:
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
Et j'aimerais utiliser une instruction SELECT qui capturerait les noms d'action qui jouent dans toutes les séries identiques à celles de smith. Ainsi, les noms d'action résultants devraient être:
costelo, denzel et lopez
Je ne sais même pas quel mot-clé utiliser. Je regardais la commande JOIN et j’essayais également de choisir MINUS. Les noms les plus proches que je pouvais obtenir étaient ceux qui jouaient exactement dans la même série que Smith (dans cette situation, lopez n’est pas inclus et est erroné)
Voici une autre explication:
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.
En d'autres termes, vous devez renvoyer les acteurs dont l'ensemble de films contient ceux de l'acteur Smith.
Vous cherchez un coup de pouce dans la bonne direction, Tomek
La solution
Désolé. Ma réponse originale a mal compris votre intention. Essayez ceci à la place:
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')
Autres conseils
SELECT DISTINCT ActorName
FROM dbo.MyTable
WHERE SeriesName IN (SELECT SeriesName FROM dbo.MyTable WHERE ActorName = 'smith');