Выберите с помощью внутреннего соединения с составным идентификатором и наличием предложения

Мне нужно выбрать определенные поля для составного идентификатора, который имеет дубликаты.

У меня есть запрос, чтобы правильно захватить дубликаты.

SELECT   b.MemEmpID, b.LastName, b.FirstName
               FROM     table1 As b
               GROUP BY b.MemEmpID, b.LastName, b.FirstName
               HAVING   Count(*) > 1

Но после обнаружения дубликатов мне нужно получить больше информации из той же таблицы, но только для составного идентификатора, который имеет дубликаты. Итак, что-то вроде следующего.

Может ли кто-нибудь помочь мне с правильным синтаксисом для этого?

SELECT a.memempid, a.depkey, a.lastname, a.firstname, a.birthdate, a.memrelation
FROM   table1 As a
INNER JOIN(SELECT   b.MemEmpID, b.LastName, b.FirstName
               FROM     table1 As b
               GROUP BY b.MemEmpID, b.LastName, b.FirstName
               HAVING   Count(*) > 1)
ON b.memempid = a.memempid
AND b.lastname = a.lastname
AND b.firstname = a.firstname

person user2136054    schedule 05.03.2013    source источник


Ответы (1)


Вы были очень близки. Вам нужно псевдоним подзапроса.

table1 As b теряет свою область действия с группировкой (), поэтому вам нужно указать псевдоним подзапроса в скобках. Вы можете повторно использовать b — он будет знать только о возвращаемых столбцах, но для ясности я выбрал (...) as c для устранения неоднозначности.

SELECT a.memempid, a.depkey, a.lastname, a.firstname, a.birthdate, a.memrelation
FROM   table1 As a
INNER JOIN
    (SELECT   b.MemEmpID, b.LastName, b.FirstName
     FROM     table1 As b
     GROUP BY b.MemEmpID, b.LastName, b.FirstName
     HAVING   Count(*) > 1
    ) as c
ON c.memempid = a.memempid
    AND c.lastname = a.lastname
    AND c.firstname = a.firstname
person Jay Walker    schedule 05.03.2013