比较两个不同的行根据一列
实施例的数据集:比较两个不同的行根据一列
我有3分不同的列
- FilmAdi(FilmName),
- OyuncuAdi(ActorName)
- 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
试试这个:
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
这使用自联接。基本上它选择了所有带有第一个演员的电影和所有带有第二个演员的电影,并且在电影相同的地方加入他们。
代码正在运行,但不像我的想法。我有演员表,电影表和电影表,其中包含演员和电影表的主键。所以,有这么多演员和电影。我想,你的解决方案只有2名演员 –
@furkanaltun但你的问题说“如果用户输入两个不同的演员姓名”,所以我给了你两个演员的解决方案。你想要什么? –
非常感谢您的帮助。我找到了我的答案,并加入了疑问。 –
假设你的表被称为[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'
;
这会给你所有的电影上有不止一个演员。
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
这里的大多数人想要格式化文本,而不是图像。 – jarlh
你输入OyuncuAdi ='Sunal' - 你确定它不是OyuncuSoyadı='Sunal'吗?你能提供你的代码吗? – plaidDK
对不起,我编辑它。我必须是OyuncuSoyadi ='Sunal' –