2016-11-15 6 views
-5
SELECT 
    * 
FROM 
    Registrations AS R1 
    INNER JOIN Registrations AS R2 
     ON R2.UserItemId = R1.UserItemId 
     AND R2.CourseOfferingId = R1.CourseOfferingId 
     AND R2.Id != R1.Id 
WHERE 
    R2.Id > R1.Id 

重複する値を削除する方法はありますか。SQLで重複する値を削除する

おかげ

+0

この質問は不完全ですが、私はあなたにこれを提供します: '登録からの削除whereは存在します(r2.UserItemId = Registrations.UserItemIdとr2.CourseOfferingId = Registrations.CourseOfferingIdとr2.Id shawnt00

+0

select 1とは何ですか? – user18160

+0

'select *'やその他の式を使用することができます。サブクエリが結果を返すかどうかが重要です。結果は実際には関係ありません。 'あなたは' 1'の値を持つ単一の行と列を取得します – shawnt00

答えて

0

ようなクエリを試すことができます私はあなたの問題で刺してみましょう。これは、あなたが提供したクエリーに基づいた推測に過ぎません。完全な質問は、重複した行が正確に何を意味するのかを説明していました。

delete from Registrations 
where exists (
    select 1 
    from Registrations r2 
    where r2.UserItemId = Registrations.UserItemId 
     and r2.CourseOfferingId = Registrations.CourseOfferingId 
     and r2.Id < Registrations.Id 
); 

はどうやらあなたは同じUserItemIdCourseOffereningIdが異なるId値を持つ複数の行を持っています。私はあなたが最も低い数字のIdを残し、他のものを捨てたいと思っています。

クエリ内のサブクエリは、テーブル内の各行を受け取り、そのような別の行があるかどうかを確認しますが、Idは低くなります。答えがイエスの場合、行は削除されます。

0

あなたはこの

;with cte as (
select *, RowN = row_number() over(partition by useritemid, courseofferingid, id order by id) from Registrations) 
delete from cte where Rown > 1 
+0

CTEに関する参考文献を含めておけば、OPに役立つだろう...彼らのために... –

関連する問題