2017-09-13 2 views
0

Exemple ensemble de données:comparaison de deux rangées différentes selon l'une colonne

enter image description here

I have 3 colonnes différentes

  1. FilmAdi (FilmName),
  2. OyuncuAdi (ActorName)
  3. OyuncuSoyadı (ActorSurname)

Si l'utilisateur saisit deux noms d'acteur différents, par ex.

OyuncuAdi='Şener', OyuncuSoyadı='Şen' and OyuncuAdi='Kemal',OyuncuSurname='Sunal' 

S'il y a un film qui est joué ensemble, obtenez le nom du film. Exemple de sortie comme ci-dessous.

'Tosun Paşa' 

Edit: Je résolu la question après trop d'essayer, cette requête est la solution qui est mon esprit

select f.FilmAdi 
from Oyuncular o 
join FilmOyuncular fo on fo.OyuncuId=o.OyuncuId 
join Filmler f on f.FilmId=fo.FilmId 
where o.OyuncuId in('4','5') --Oyuncu.OyuncuID 4 ve 5 olan oyuncuların oynadıkları filmler 
group by f.FilmAdi 
having COUNT(f.FilmId)>1 
+2

La plupart des gens ici veulent du texte formaté, pas des images. – jarlh

+0

Vous tapez OyuncuAdi = 'Sunal' - Êtes-vous sûr que ce n'est pas OyuncuSoyadı = 'Sunal'? Pouvez-vous s'il vous plaît fournir votre code? – plaidDK

+0

désolé, je l'édite. Je dois être OyuncuSoyadi = 'Sunal' –

Répondre

2

Essayez ceci:

declare @filmactors table 
(
film varchar(20), 
firstname varchar(20), 
surname varchar(20) 
) 

INSERT INTO @filmactors VALUES 
('Tosun Pasa', 'Kemal', 'Sunal'), 
('Tosun Pasa', 'Sener', 'Sen'), 
('Av Mevsimi', 'Sener', 'Sen') 

declare @firstActorName varchar(20) = 'Kemal' 
declare @firstActorSurName varchar(20) = 'Sunal' 
declare @secondActorName varchar(20) = 'Sener' 
declare @secondActorSurName varchar(20) = 'Sen' 


SELECT f1.film FROM @filmactors f1 
INNER JOIN @filmactors f2 ON f1.film = f2.film 
WHERE 
    f1.firstname = @firstActorName AND 
    f1.surname = @firstActorSurName 
AND f2.firstname = @secondActorName AND 
    f2.surname = @secondActorSurName 

Résultat:

Tosun Pasa 

Ceci utilise une auto-jointure. Fondamentalement, il sélectionne tous les films avec le premier acteur et tous les films avec second acteur et les rejoint où le film est le même.

+0

Le code est en cours d'exécution, mais pas comme mon esprit. J'ai table d'acteurs, table de film et table de filmactor qui contiennent des clefs primaires des tables d'acteur et de film. Donc, il y a tellement d'acteurs et de films. Je suppose, votre solution est seulement 2 acteur –

+0

@furkanaltun Mais votre question a dit "si l'utilisateur entre deux noms d'acteurs différents", alors je vous ai donné une solution à deux acteurs. Que voulez-vous exactement? –

+0

merci beaucoup pour votre aide. J'ai trouvé ma réponse et j'ai ajouté à la question. –

1

En supposant que votre table est appelée [FilmActor], vous pouvez effectuer les opérations suivantes

SELECT FA1.[FilmAdi] 
FROM [FilmActor] FA1 
INNER JOIN [FilmActor] FA2 
ON FA2.[FilmAdi] = FA1.[FilmAdi] 
AND FA2.[OyuncuAdi] = 'Kemal' 
AND FA2.[OyuncuSurname] = 'Sunal' 
WHERE 
FA1.[OyuncuAdi]='Şener' 
AND FA1.[OyuncuSoyadı] = 'Şen' 
; 
0

Cela vous donnera tous les films qui ont plus d'un acteur.

SELECT DISTINCT FilmName from (
SELECT [FilmName] 
    ,[ActorName] 
    ,[ActorSurname] 
    ,ROW_NUMBER() over(partition by filmname order by filmname) as rn 
FROM [LegOgSpass].[dbo].[actors] 
)X where X.rn > 1