2017-02-16 12 views
0

私は、データを2つのデータセットがtempテーブルにロードされたテーブルに引き込み、最後にテーブルに挿入するように取り組んでいます。重複している2つのレコードがありますが、1つの列の値が同じ場合は両方のレコードが必要です。 col1とCOL4は、私が欲しいのは、列2およびcol3ということを忘れる行1、行2は、それがCOL4をチェックして、行1、行2が異なる場合、それはすべきで行くべき同じであれば、COL1にチェックインされた主キーテーブルから重複する値を削除する方法

col1 col2 col3 col4 
-------------------- 
a  ab abc x 
a  ab abc y 
b  ab abc y 
b  ab abc z 

ですcol4の行2と行3が同じであっても、行1と行2の両方を表示します。レコードが私が述べたように4つの値はすべて許されるはずですが、ロジック1を書いたのはrow1、row3、row4です。col2のrow2とrow3とcol4のrow2の行3と3私はすべてのレコードが欲しいです。この状況のた​​めにSQLでロジックを書く方法を教えてください。

+0

をするために明らかに、あなたは4列の主キーを持っていますか?私はこのテーブルのデザインについての質問に続くことをお勧めします。 – Schwern

+0

col1とcol4が主キー – Gee

+2

してください。希望する結果を追加してください。 – McNets

答えて

0

私はあなたの質問から理解した内容をもとに、あなたはこのような何か...

DELETE i 
FROM YourTable i INNER JOIN 
( 
SELECT col1,col4 
FROM YourTable 
GROUP BY col1,col4 
HAVING count(col2)>1 
) t ON t.col1 = i.col1 AND t.col4 = i.col4 

Live Demo Here

場合やOUは1つのレコードだけを保持し、他の重複レコードを削除する操作を行うことができ、あなたはこのように行うことができます。..

;with cte as 
(
    SELECT *,row_number() over(partition by col1,col4 order by col1,col4) as rn 
    FROM YourTable 
) 

DELETE from cte where rn>1 

Live Demo Here

関連する問題