我需要找到足球队A的球员的名字,但其姓氏与足球队B的球员的名字不同。我需要提供足球队A的所有球员的全名,而不仅仅是“约翰” 。我可以在所有团队中使用具有唯一ID的附加列。
基本表如下:
FirstName LastName Team
John Snow A
Batman Dies B
John Dies B
我可以列出与B队球员同名的A队名单。
SELECT firstname, lastname FROM table
即使姓氏不能用于一个条目,也应考虑将其用于其他条目。
答案 0 :(得分:1)
尝试以下操作:
select distinct t1.FirstName
from
(
SELECT firstname, lastname FROM @t where Team = 'A'
) as t1
inner join
(
SELECT firstname, lastname FROM @t where Team = 'B'
) as t2
on (t1.FirstName = t2.FirstName)
where t1.LastName <> t2.LastName
答案 1 :(得分:1)
很简单:
$ vapigen --library MyLibrary MyLibrary.gir
答案 2 :(得分:0)
您可以使用公用表表达式,然后对名字进行内部联接。在下面的示例中,我使用CTE拆分了各个团队,然后重新加入以确保团队不匹配,姓氏不匹配且姓氏不匹配。
然后,我使用并集声明来显示如何也可以显示其他团队中的球员。
declare @soccerteam table
(
FirstName nvarchar(50),
LastName nvarchar(50),
Team nvarchar(3)
);
insert @soccerteam (FirstName, LastName, Team)
values
('John', 'Snow', 'A'),
('Batman', 'Dies', 'B'),
('John', 'Dies', 'B');
select * from @soccerteam;
with teamB as (select FirstName, LastName, Team from @soccerteam where Team='B')
select 'Players in Team A matching Team B', a.* from @soccerteam a inner join teamB b on a.FirstName=b.FirstName and a.LastName<>b.LastName and a.Team<>b.Team
union
select 'Players in Team B matching Team A', b.* from @soccerteam a inner join teamB b on a.FirstName=b.FirstName and a.LastName<>b.LastName and a.Team<>b.Team;
答案 3 :(得分:0)
您可以使用以下代码:
;WITH CTE AS
(
SELECT *
FROM Table
WHERE Team = 'A'
),CTE1 AS
(
SELECT *
FROM Table
WHERE Team = 'B'
)
SELECT *
FROM CTE R1
JOIN CTE1 R2 ON R1.FirstName = R2.FirstName
AND R1.LastName <> R2.LastName