如何找到名字相同但姓氏不同的足球运动员的名字?

时间:2019-05-29 13:37:44

标签: sql-server sql-order-by inner-join

我需要找到足球队A的球员的名字,但其姓氏与足球队B的球员的名字不同。我需要提供足球队A的所有球员的全名,而不仅仅是“约翰” 。我可以在所有团队中使用具有唯一ID的附加列。

基本表如下:

FirstName  LastName     Team
John       Snow         A
Batman     Dies         B
John       Dies         B

我可以列出与B队球员同名的A队名单。

SELECT firstname, lastname FROM table

即使姓氏不能用于一个条目,也应考虑将其用于其他条目。

4 个答案:

答案 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