Nếu bạn muốn đếm các bản sao giữa nhiều cột, hãy sử dụng group by
:
select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC
Nếu bạn chỉ muốn các giá trị được trùng lặp, thì số lượng lớn hơn 1. Bạn nhận được điều này bằng cách sử dụng having
mệnh đề:
select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC
having NumDuplicates > 1
Nếu bạn thực sự muốn tất cả các hàng trùng lặp trả về, hãy nối truy vấn cuối cùng trở lại dữ liệu ban đầu:
select t.*
from table t join
(select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC
having NumDuplicates > 1
) tsum
on t.ColumnA = tsum.ColumnA and t.ColumnB = tsum.ColumnB and t.ColumnC = tsum.ColumnC
Điều này sẽ hoạt động, giả sử không có giá trị cột nào là NULL. Nếu vậy, hãy thử:
on (t.ColumnA = tsum.ColumnA or t.ColumnA is null and tsum.ColumnA is null) and
(t.ColumnB = tsum.ColumnB or t.ColumnB is null and tsum.ColumnB is null) and
(t.ColumnC = tsum.ColumnC or t.ColumnC is null and tsum.ColumnC is null)
CHỈNH SỬA:
Nếu bạn có NULL
, bạn cũng có thể sử dụng NULL
- nhà điều hành an toàn:
on t.ColumnA <=> tsum.ColumnA and
t.ColumnB <=> tsum.ColumnB and
t.ColumnC <=> tsum.ColumnC