42

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

4

5 に答える 5

61

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

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
于 2008-11-20T20:44:07.470 に答える
15

group byすべての列で使用でき、その後count(*)>1

于 2008-11-20T20:28:13.180 に答える
8

これを試して

Select * From Table
Group By [List all fields in the Table here]
Having Count(*) > 1
于 2008-11-20T20:43:19.263 に答える
3

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

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

重複を削除したい場合...疑似....

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

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

于 2008-11-20T20:39:04.390 に答える
3

提供された提案に加えて、後でそれらを見つけようとするのではなく、将来的に重複を防ぐ努力をします.

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

于 2008-11-20T21:48:17.700 に答える