Как мне найти имена футболистов с одинаковыми именами, но разными фамилиями? - PullRequest
0 голосов
/ 29 мая 2019

Мне нужно найти имена игроков из футбольной команды A, которые имеют то же имя, но другую фамилию, что и игроки из футбольной команды B. Мне нужно указать полные имена всех игроков из команды A, а не только «Джон».,Я могу использовать дополнительный столбец с уникальными идентификаторами игроков для всех команд.

В основном таблица выглядит следующим образом:

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

Я могу создать список имен команд А с одинаковыми первымиимя в качестве игроков команды B.

SELECT firstname, lastname FROM table

Несмотря на то, что фамилию нельзя использовать для одной записи, ее следует учитывать для других записей.

Ответы [ 4 ]

1 голос
/ 29 мая 2019

Так же просто, как:

<code>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'
1 голос
/ 29 мая 2019

Попробуйте следующее:

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
0 голосов
/ 29 мая 2019

Вы можете использовать следующий код:

;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 
0 голосов
/ 29 мая 2019

Вы можете использовать общее табличное выражение, а затем выполнить внутреннее соединение по имени.В приведенном ниже примере я разделил команды, используя 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;
...