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

Sql server 我如何找到名字相同但姓氏不同的足球运动员的名字?,sql-server,sql-order-by,inner-join,Sql Server,Sql Order By,Inner Join,我需要找到A队球员的名字,他们的名字与B队球员的名字相同,但姓氏不同。我需要提供A队所有球员的全名,而不仅仅是“约翰”。我可以使用一个额外的列,其中包含所有球队中唯一的球员ID 表基本上如下所示: FirstName LastName Team John Snow A Batman Dies B John Dies B 我可以列出a队球员和B队球员名字相同的名单 SELECT firstname, las

我需要找到A队球员的名字,他们的名字与B队球员的名字相同,但姓氏不同。我需要提供A队所有球员的全名,而不仅仅是“约翰”。我可以使用一个额外的列,其中包含所有球队中唯一的球员ID

表基本上如下所示:

FirstName  LastName     Team
John       Snow         A
Batman     Dies         B
John       Dies         B
我可以列出a队球员和B队球员名字相同的名单

SELECT firstname, lastname FROM table

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

您可以使用通用表表达式,然后对firstname进行内部联接。在下面的示例中,我使用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;
请尝试以下操作:

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

您可以使用以下代码:

;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 
简单到:


如果B队中有多个“约翰”,这不会产生同一个球员的副本吗?@CampionCircle是的,会。它应该有不同的名称。我应该指定,我需要提供A队的全名。@CampionCircle您想要得到的是A队中的球员的名字,他们在B队中有相同的名字和不同的姓氏?是的。我为球员添加了ID,将您的第一行更改为“选择不同的t1.ID”,并将其括起来,说明“从ID所在的表中选择姓氏,姓氏…”该代码的可能副本显然不会生成与B队球员同名的a队球员名单。你为什么这么说?您的代码返回玩家[firstname][lastname]所在团队的行。你的最后一句话不清楚。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。PS请在发布前查看编辑框下方的格式化版本。阅读“编辑帮助”“重新内联和块格式”中的代码和引用。单击“已编辑…”查看您的文章是如何编辑的。
SELECT DISTINCT A.* FROM Table A
INNER JOIN Table B
ON A.FirstName = B.FirstName AND A.LastName <> B.LastName 
WHERE A.Team = 'A' AND B.Team = 'B'