【发布时间】:2018-12-22 07:10:17
【问题描述】:
请考虑这个脚本:
declare @FirstTable Table
(
Name nvarchar(50), -- Key
Gender tinyint, -- Key 1 for Male, 2 for Female
DateModified datetime
)
insert into @FirstTable
Values(N'Tom' , 1, GETDATE()),
(N'Tom' , 2, GETDATE()),
(N'Clare' , 2, GETDATE()),
(N'Lauren' , 1, GETDATE()),
(N'Sara' , 2, GETDATE()),
(N'Al' , 1, GETDATE()),
(N'Kevin' , 1, GETDATE()),
(N'Meril' , 2, GETDATE())
declare @Movies Table
(
Id int identity(1,1),
Name nvarchar(50), -- Key
ActorName Nvarchar(50),
ActorGender tinyint,
ReleaseDate datetime
)
insert into @Movies
Values (N'Movie 1', N'Tom' , 1, GETDATE()),
(N'Movie 2', N'Kevin' , 2, GETDATE()),
(N'Movie 3', N'Meril' , 2, GETDATE()),
(N'Movie 4', N'Meril' , 2, GETDATE()),
(N'Movie 5', N'Clare' , 1, GETDATE()),
(N'Movie 6', N'Tom' , 2, GETDATE()),
(N'Movie 7', N'Al' , 1, GETDATE()),
(N'Movie 8', N'Sara' , 1, GETDATE()),
(N'Movie 9', N'Ben' , 2, GETDATE()),
(N'Movie 10', N'Viera' , 2, GETDATE()),
(N'Movie 11', N'George' , 2, GETDATE()),
(N'Movie 12', N'Frank' , 2, GETDATE()),
(N'Movie 13', N'Kevin' , 2, GETDATE())
select Id,
tmp.Name,
ActorName,
ActorGender,
ReleaseDate
from @Movies tmp inner join @FirstTable gn on tmp.ActorName = gn.Name
where tmp.ActorGender <> gn.Gender
我想在Movie 表中选择性别无效的数据。例如,如果我们假设 Tom 是男性和女性之间的通用名称,则上述查询在结果中返回 Tom(这是不正确的)。请帮助我更正我的选择语句。
编辑 1)
有一些记录(名称)只存在于Movies 表中,而FirstTable 中没有对应的记录。我不希望我的查询返回这些记录。
感谢@Nick,我想要这个结果:
Id Name ActorName ActorGender ReleaseDate
2 Movie 2 Kevin 2 22/12/2018 07:20:14
5 Movie 5 Clare 1 22/12/2018 07:20:14
8 Movie 8 Sara 1 22/12/2018 07:20:14
10 Movie 10 Kevin 2 22/12/2018 07:20:14
谢谢
【问题讨论】:
-
如果两性同名怎么办?我的意思是,它们确实存在吗?
-
这正是问题所在。以上查询错误返回
Tom
标签: sql sql-server sql-server-2014 sql-server-2016