SQL che confronta un insieme di informazioni in una colonna
Domanda
Ciao a tutti, ho difficoltà a scrivere questo correttamente, motivo per cui ho problemi a trovare una risposta online, quindi il meglio che posso fare è fare un esempio. Ho la seguente tabella di database:
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 vorrei usare un'istruzione SELECT che catturasse gli actornames che suonano in tutte le stesse serie in cui Smith gioca. Quindi gli actornames risultanti dovrebbero essere:
costelo, denzel e lopez
Non sono nemmeno sicuro di quale parola chiave utilizzare. Stavo guardando il comando JOIN e ho anche provato MINUS, il più vicino che potevo ottenere erano actornames che suonavano esattamente nella stessa serie di Smith (in quella situazione, Lopez non è incluso ed è sbagliato)
Ecco un'altra spiegazione:
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.
In altre parole, devi restituire quegli attori il cui set di film contiene quelli dell'attore Smith.
Alla ricerca di una spinta nella giusta direzione, Tomek
Soluzione
Siamo spiacenti. La mia risposta originale fraintende il tuo intento. Prova invece questo:
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')
Altri suggerimenti
SELECT DISTINCT ActorName
FROM dbo.MyTable
WHERE SeriesName IN (SELECT SeriesName FROM dbo.MyTable WHERE ActorName = 'smith');