0

SQL初心者。

2 つのファイルをクレーム テーブル (Claims) にインポートしました。ファイル 4028 には 6,721 行があり、ファイル 2090 には 4,707 行があります。両方のファイルに同じ列 (Amt、First、Last、FillDate) があります。

次のクエリを使用して重複を特定しました。

SELECT first, last, amt, filldate, COUNT(*) AS duplicatecount
FROM Claims
WHERE fileid IN (4028, 2090)
GROUP BY first, last, amt, filldate
HAVING COUNT(*) > 1
ORDER BY 1,2 DESC

2 つのファイル間の重複を削除するにはクエリが必要です。ファイル 2090 から削除します。

ありがとう

4

3 に答える 3

0

1つの可能性はEXISTS、削除時に重複が存在することを確認するために使用することです。

DELETE C
FROM Claims C
WHERE C.fileId = 2090
AND EXISTS (
    SELECT 1
    FROM Claims D
    WHERE 
        D.fileid = 4028 
    AND C.first = D.first 
    AND C.last = D.last
    AND C.amt = D.amt
    AND C.filldate = D.filldate
)
于 2013-01-01T15:39:49.487 に答える
0

相関サブクエリを使用できます。

   delete * from yourtable a
   inner join 
   (select  fileid, first, last, amt, filldate             
    from yourtable
    where fileid in (4028, 2090)
    group by first, last, amt, filldate
    having count(1) > 1) as duplicates
   on (duplicates.first = a.first
   and duplicates.last = a.last
   and duplicates.amt = a.amt
   and duplicates.filldate = a.filldate)
   ;

これにより、削除するファイルIDを定義しなくても、すべての重複が削除されます。

delete * from yourtable a
   inner join 
   (select  min(id) minid, first, last, amt, filldate             
    from yourtable
    group by first, last, amt, filldate
    having count(1) > 1) as duplicates
   on (duplicates.first = a.first
   and duplicates.last = a.last
   and duplicates.amt = a.amt
   and duplicates.filldate = a.filldate
   and duplicates.minid <> a.id)
   ;
于 2013-01-01T15:53:01.600 に答える
0
DELETE * FROM Claims WHERE fileid = 2090 AND first IN (the query you used to find the duplicates)

これを試してください...そして、うまくいくかどうか教えてください....

于 2013-01-01T15:43:12.687 に答える