2016-07-19 13 views
0

Ich möchte ein Duplikat von IRN # finden, die in einer Tabelle in der Datenbank eingegeben wurden. Hier sind die einzigartigen Attribute (logisch eindeutig) des IRN.Doppelte Datensätze in der Datenbank nach eindeutigen Attributen suchen

ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldNo 

Ein IRN kann mehrere WeldNos die oben einzigartigen Attribute Bedeutung für eine IRN # wiederholen kann (natürlich mit einem der 5 Attributwerte müssen eindeutig sein).

Jetzt versuche ich herauszufinden, ob es doppelte IRNs in das System eingegeben oder nicht gibt? Wie kann ich das durch eine SQL-Abfrage finden?

P. S: Wegen der schlechten Design der Datenbank gibt es in der Tabelle kein Primärschlüssel ist ..

Hier ist, was ich bisher versucht, aber diese geben nicht die richtigen Ergebnisse.

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

Sie haben kein Duplikat definiert. – sagi

Antwort

2

Aber ich bin mir nicht sicher, habe ich Ihre Frage verstanden.

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

Erläuterung.

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

Ich habe das versucht, aber es sagt, es hat Syntaxfehler. "Links Klammer" – WAQ

+0

sollte es jetzt funktionieren –

+0

es sicherlich einige Daten zurückgegeben, aber ich bezweifle das Ergebnis ist korrekt. Können Sie bitte erklären, was die obige Abfrage bewirkt? – WAQ

Verwandte Themen