2016-07-19 2 views
0

データベースのテーブルに入力されたIRN#の重複を探したい。次に、IRNの固有の属性(論理的に一意)を示します。ユニークな属性に対してデータベース内の重複レコードを見つける

ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldNo 

アンIRNは(一意である必要があります5つの属性値のコースの一つで)1つのIRNの#のために繰り返すことが上記のユニークな属性を意味し、複数のWeldNosを持つことができます。

システムに重複したIRNが入力されているかどうかを確認しようとしていますか?どのように私はSQLクエリを介してそれを見つけることができますか?

P.S:によりデータベースの悪いデザインに、テーブルには主キーがありません。..

ここでは、私がこれまで試してみましたが、これは正しい結果が得られていないものです。

select * from WeldInfo a, WeldInfo b 
where a.ProjectNo = b.ProjectNo and 
a.DrawingNo = b.DrawingNo and 
a.DrawingRev = b.DrawingRev and 
a.SpoolNo = b.SpoolNo and 
a.WeldNo = b.WeldNo and 
a.IrnNo <> b.IrnNo; 
+0

重複を定義していません。 – sagi

答えて

2

しかし、私はあなたの質問を理解しましたか分かりません。

select * from (
select count(*) over (partition by ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldN) rr,t.* from WeldInfo t) 
where rr > 1; 

説明

with tab as (
select 1 as id, 'a' as a , 'b' as b , 'c' as c from dual 
union all 
select 2 , 'a', 'b', 'c' from dual 
union all 
select 3 , 'x', 'b', 'c' from dual 
union all 
select 3 , 'x', 'b', 'c' from dual 
union all 
select 3 , 'x', 'd', 'c' from dual 
) 

select t.* 
     , count(*) over (partition by a,b,c) cnt1 
     , count(distinct id) over (partition by a,b,c) cnt2 
from tab t; 
+0

私はこれを試しましたが、構文エラーがあります。左括弧が残っています – WAQ

+0

これは今すぐ動作するはずです –

+0

確かにいくつかのデータが返されましたが、結果は正しいとは限りません。上記のクエリが何をしているか説明してください。 – WAQ

関連する問題