web-dev-qa-db-ja.com

SQL Serverテーブルの重複行を検出する方法は?

10列/ 50K行テーブルで重複を検出する最も効率的な方法は何ですか? MSSQL 8.0を使用しています

37
Bajji

他の人が何を説明しているかの例を示すには:

SELECT
    Col1, -- All of the columns you want to dedupe on
    Col2, -- which is not neccesarily all of the columns
    Col3, -- in the table
    Col4,
    Col5,
    Col6,
    Col7,
    Col8,
    Col9,
    Col10
FROM
    MyTable
GROUP BY
    Col1,
    Col2,
    Col3,
    Col4,
    Col5,
    Col6,
    Col7,
    Col8,
    Col9,
    Col10
HAVING
    COUNT(*) > 1
57
knightpfhor

すべての列で_group by_を使用してから、count(*)>1を使用できます

13
Guge

これを試して

Select * From Table
Group By [List all fields in the Table here]
Having Count(*) > 1
7
Charles Bretana

提供された提案に加えて、後で重複を見つけようとするのではなく、将来、重複を防ぐ努力に取り組みます。

これは、一意であると想定されている列(または列のグループ)の一意のインデックスを使用して行われます。データベース内のデータは、作業中の特定のアプリ以外の場所から変更できるため、DBレベルのテーブルで許可されているものと許可されていないものを定義することをお勧めします。

3
LeppyR64

検出するには、Gugeが言ったようにグループ化するだけです。

select fieldA, fieldB, count(*) from table
group by fieldA, fieldB
having count(*) > 1

Dupes ... pseudo ....を削除する場合.

select distinct into a temp table
truncate original table
select temp table back into original table

切り捨てを使用すると、FK制約がある場合に問題が発生する可能性があります。そのため、制約を削除し、レコードが孤立しないように注意してください。

3
Aaron Palmer