Nếu bạn đang sử dụng SQL Server 2005 trở lên (và các thẻ cho câu hỏi của bạn chỉ ra SQL Server 2008), bạn có thể sử dụng các hàm xếp hạng để trả về các bản ghi trùng lặp sau lần đầu tiên nếu sử dụng phép nối ít mong muốn hoặc không thực tế vì một số lý do. Ví dụ sau đây cho thấy điều này trong hành động, nơi nó cũng hoạt động với các giá trị null trong các cột được kiểm tra.
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
Lưu ý sau khi chạy ví dụ này rằng bản ghi đầu tiên trong số mọi "nhóm" bị loại trừ và các bản ghi có giá trị null được xử lý đúng cách.
Nếu bạn không có sẵn một cột để sắp xếp các bản ghi trong một nhóm, bạn có thể sử dụng các cột theo phân vùng làm các cột theo thứ tự.