0

テーブルから重複した (値と値が同じ) タプルを削除したいのですが、最小のオブジェクト ID (オブジェクト ID は pk) のタプルを保持する必要があります。

したがって、ここに列があります:

から| へ | 時間 | 距離 | object_id

実行することで削除されるタプルの正しい数を確認できます

select [from],[to],count(*)
FROM table
where [object_id] NOT IN(
    SELECT min([object_id])
      FROM table
      group by [from],[to]
      having count(*) > 1)
group by [from],[to]
having count(*) > 1

しかし、上記のSQLでカウントされるobject_idを最初に確認したいと思います。

4

1 に答える 1

1

これで試すことができます(テストされていません)...

;WITH temp AS (
    SELECT [from_id], [to_id], [object_id] = min([object_id])
    FROM table
    group by [from_id],[to_id]
    having count(*) > 1)
SELECT
    t2.[from_id],
    t2.[to_id],
    t.[object_id]
FROM 
    table t
    join temp t2 
        on t2.[from_id] = t.[from_id]
        AND t2.[to_id] = t.[to_id]
        AND t2.[object_id] != t.[object_id]

編集:

CTE temp は、維持したい最小 object_id を持つすべての個別の from/to グループを生成します。

SELECT [from_id], [to_id], [object_id] = min([object_id])
FROM table
group by [from_id],[to_id]
having count(*) > 1

他にも削除したいペアがあり、これらは from/to ペアと同じですが、object_id が異なります。最後の選択は、それらのレコードを正確に出力する必要があります。

于 2013-06-14T12:52:52.893 に答える