2016-12-20 5 views
1

私たちはユーザがシステムに翻訳を追加することができたので翻訳を行っています。 APIのバグにより、削除する必要がある重複行が追加されました。データベース内の行が重複しています

enter image description here

TranslationCompanyKey_Id組み合わせるtranslationConnection_Idはキーであり、そのためには、重複することができてはなりません。 私はSQLで本当に吸盤だから、私はすべての重複を削除するスクリプトを作成するためにいくつかの助けが必要ですが、行の1つを保存します。

SELECT TOP 1000 [Id] 
    ,[Value] 
    ,[TranslationConnection_Id] 
    ,[TranslationCompanyKey_Id] 
FROM [AAES_TRAN].[dbo].[Translations] 
+1

可能な複製(http://stackoverflow.com/questions/18932/how-can-i-remove-duplicateこれを試してみてください-rows) – Reisclef

+0

あなたは 'VALUE'フィールドに2つの異なる値を持っています。どのように保つべきかをどのように決定するのですか? – JohnHC

+0

私はそれらのうちの1つを保存する必要はありますが、どちらのものでも関係ありません:) –

答えて

5

これはうまくいくと思います。最初にSELECT部分​​を試してください。

DELETE FROM tblTranslations WHERE ID IN (
    SELECT MAX(ID) FROM tblTranslations 
    GROUP BY TranslationConnection_Id, TranslationCompanyKey_Id 
    HAVING COUNT(*) > 1 
) 
+0

ありがとう!完璧に動作します! –

0

あなたは

SELECT * FROM (
SELECT TOP 1000 [Id] 
    ,[Value] 
    ,[TranslationConnection_Id] 
    ,[TranslationCompanyKey_Id] 
    ,ROW_NUMBER() OVER(PARTITION BY [Value] ORDER BY [Value]) AS rn 
FROM [AAES_TRAN].[dbo].[Translations]) xxx 
WHERE rn = 1; 
0

のように私はあなたが重複したレコードから1つのレコードを維持したいと思います。このためROW_NUMBER()分析関数を使用することができます。

このコードは重複したレコードを削除しますが、1つのレコードを保持します。

DELETE FROM TestTranslationTable WHERE ID IN(
    SELECT Id FROM TestTranslationTable tblMain 
    WHERE tblMain.Id NOT IN (SELECT TOP 1 tblNested.id FROM TestTranslationTable tblNested WHERE 
    tblNested.TranslationConnectionId=tblMain.TranslationConnectionId ORDER BY tblNested.TranslationConnectionId) 
    AND tblMain.TranslationConnectionId IN(SELECT TranslationConnectionId FROM TestTranslationTable 
    GROUP BY TranslationConnectionId HAVING COUNT(TranslationConnectionId)>1) 
    ) 
    GO 

参考:[?どうすれば重複行を削除することができます]のhttps://jwcooney.com/2011/11/18/sql-server-delete-duplicate-records-except-the-first-duplicate-record/

関連する問題