2017-09-13 68 views
0

實施例的數據集:比較兩個不同的行根據一列

enter image description here

我有3分不同的列

  1. FilmAdi(FilmName),
  2. OyuncuAdi(ActorName)
  3. OyuncuSoyadı (演員姓名)

如果用戶輸入兩個不同的演員姓名,例如

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

如果有什麼電影在一起播放,請獲得電影名稱。 示例輸出如下。

'Tosun Paşa' 

編輯:我解決了問題後,太多的嘗試,這個查詢解決方案,它是我心中

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

這裏的大多數人想要格式化文本,而不是圖像。 – jarlh

+0

你輸入OyuncuAdi ='Sunal' - 你確定它不是OyuncuSoyadı='Sunal'嗎?你能提供你的代碼嗎? – plaidDK

+0

對不起,我編輯它。我必須是OyuncuSoyadi ='Sunal' –

回答

2

試試這個:

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 

結果:

Tosun Pasa 

這使用自聯接。基本上它選擇了所有帶有第一個演員的電影和所有帶有第二個演員的電影,並且在電影相同的地方加入他們。

+0

代碼正在運行,但不像我的想法。我有演員表,電影表和電影表,其中包含演員和電影表的主鍵。所以,有這麼多演員和電影。我想,你的解決方案只有2名演員 –

+0

@furkanaltun但你的問題說「如果用戶輸入兩個不同的演員姓名」,所以我給了你兩個演員的解決方案。你想要什麼? –

+0

非常感謝您的幫助。我找到了我的答案,並加入了疑問。 –

1

假設你的表被稱爲[FilmActor]你可以做以下

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

這會給你所有的電影上有不止一個演員。

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