SQL comparando el conjunto de información en una columna
Pregunta
Hola a todos, estoy teniendo dificultades para redactar esto correctamente, por eso tengo problemas para encontrar una respuesta en línea, así que lo mejor que puedo hacer es dar un ejemplo. Tengo la siguiente tabla de base de datos:
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
Y me gustaría usar una instrucción SELECT que tome los nombres de los actores que juegan en todas las mismas series en las que juega smith. Por lo tanto, los actornames resultantes deberían ser:
costelo, denzel y lopez
Ni siquiera estoy seguro de qué palabra clave utilizar. Estaba mirando el comando ÚNETE y también probé MINUS, lo más cerca que pude estar fueron los nombres de los actores que juegan exactamente en la misma serie que juega Smith (en esa situación, López no está incluido y está mal)
Aquí hay otra explicación:
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 otras palabras, debe devolver aquellos actores cuyo conjunto de películas contiene los del actor Smith.
Buscando un empuje en la dirección correcta, Tomek
Solución
Lo siento. Mi respuesta original malinterpreta tu intención. Intente esto en su lugar:
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')
Otros consejos
SELECT DISTINCT ActorName
FROM dbo.MyTable
WHERE SeriesName IN (SELECT SeriesName FROM dbo.MyTable WHERE ActorName = 'smith');