2009-10-22 5 views
0

Salut à tous, je vais avoir un moment difficile à formuler correctement ce qui est pourquoi j'ai du mal à trouver une réponse en ligne, donc le mieux que je puisse faire est de donner un exemple. J'ai la table de base de données suivante:SQL comparant ensemble d'informations dans une colonne

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 

Je voudrais utiliser une instruction SELECT qui saisirait les actornames qui jouent dans tous de la même série que Smith joue dans Ainsi, les actornames résultant doivent être:.

costelo, denzel et lopez

Je ne sais même pas quel mot-clé utiliser. Je regardais la commande JOIN et aussi essayé MINUS, le plus proche que je pouvais obtenir étaient des actornames qui jouent exactement dans la même série que smith joue (dans cette situation, lopez n'est pas inclus et est faux)

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

Répondre

2

Désolé. Ma réponse originale a mal compris votre intention. Essayez ceci:

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') 
+0

Cela renvoie tous les acteurs qui sont l'une des séries que Smith a joué dans. J'ai besoin des acteurs qui ont joué dans toutes les séries auxquelles smith a joué. – Tomek

+0

PAS ce mauvais ... ce n'est pas ce qui est prévu.Il va donner des lignes supplémentaires –

+0

Cette déclaration ne renvoie que les acteurs qui ont joué dans seulement le série dans laquelle smith a joué et n'inclut pas les acteurs qui ont joué dans toutes les séries auxquelles Smith a joué et plus, ce qui devrait être inclus dans la réponse. (J'ai ajouté une autre explication à ma question initiale pour éclaircir les choses un peu plus, comme j'ai dit que c'est très difficile à prononcer correctement) – Tomek

0
SELECT DISTINCT ActorName 
    FROM dbo.MyTable 
    WHERE SeriesName IN (SELECT SeriesName FROM dbo.MyTable WHERE ActorName = 'smith'); 
Questions connexes