Если вы используете SQL Server 2005 или более позднюю версию (а теги для вашего вопроса указывают на SQL Server 2008), вы можете использовать функции ранжирования, чтобы возвращать дубликаты записей после первой, если использование объединений менее желательно или нецелесообразно по какой-либо причине. Следующий пример показывает это в действии, где он также работает с нулевыми значениями в исследованных столбцах.
create table Table1 (
Field1 int,
Field2 int,
Field3 int,
Field4 int
)
insert Table1
values (1,1,1,1)
, (1,1,1,2)
, (1,1,1,3)
, (2,2,2,1)
, (3,3,3,1)
, (3,3,3,2)
, (null, null, 2, 1)
, (null, null, 2, 3)
select *
from (select Field1
, Field2
, Field3
, Field4
, row_number() over (partition by Field1
, Field2
, Field3
order by Field4) as occurrence
from Table1) x
where occurrence > 1
Обратите внимание после запуска этого примера, что первая запись из каждой «группы» исключена и что записи с нулевыми значениями обрабатываются правильно.
Если у вас нет доступного столбца для упорядочения записей в группе, вы можете использовать столбцы с разделением по столбцам в качестве столбцов с упорядочением по.