![]() |
Datenbank: Firebird • Version: 2.5.3 • Zugriff über: IBO
Doppelte Datensätze löschen
Hallo,
mit folgendem Befehl kann ich doppelte Datensätze finden. select count(*), Patientnr, Datum, Suchwort, Anlage from TBL_PATDIAGNOSE group by Patientnr, Datum, Suchwort, Anlage having count(*) > 1 aber wie kann ich die doppelten Datensätze per SQL auf einem Rutsch löschen. Es sind 7956 Datensätze doppelt. |
AW: Doppelte Datensätze löschen
Hat die Tabelle TBL_PATDIAGNOSE eine eindeutige ID (PK)?
|
AW: Doppelte Datensätze löschen
Ja hat sie : PATDIAGNOSENR
|
AW: Doppelte Datensätze löschen
Dann in etwa so:
Code:
Also diejenigen Sätze löschen bei denen alle Vergleichsfelder übereinstimmen AUSSER dem ID-Feld.
delete from TBL_PATDIAGNOSE A
where exists (Select B.PATDIAGNOSENR from TBL_PATDIAGNOSE B where A.Patientnr = B.Patientnr and A.Datum = B.Datum and A.Suchwort = B.Suchwort and A.Anlage = B.Anlage and A.PATDIAGNOSENR <> B.PATDIAGNOSENR) |
AW: Doppelte Datensätze löschen
SQL-Code:
oder
select ID
from TBL_PATDIAGNOSE where ( select count(*) > 1 from TBL_PATDIAGNOSE AS x where x.Patientnr = TBL_PATDIAGNOSE.Patientnr and x.Datum = TBL_PATDIAGNOSE.Datum and x.Suchwort = TBL_PATDIAGNOSE.Suchwort and x.Anlage = TBL_PATDIAGNOSE.Anlage )
SQL-Code:
select ID
from TBL_PATDIAGNOSE where exists( select true from TBL_PATDIAGNOSE AS x where x.ID <> TBL_PATDIAGNOSE.ID and x.Patientnr = TBL_PATDIAGNOSE.Patientnr and x.Datum = TBL_PATDIAGNOSE.Datum and x.Suchwort = TBL_PATDIAGNOSE.Suchwort and x.Anlage = TBL_PATDIAGNOSE.Anlage ) Und jetzt das ganze nur noch als
SQL-Code:
für das DELETE-Statement verwenden, aber vorer solltest du noch mindestens jeweils einen der Datensätze in einem der WHERE ausschließen ... und zwar jeweils Jenen, welchen du behalten willst, ansonsten sind wirklich alle Doppelten weg. :stupid:
where ID in (...)
Oder so wie Union, der aber ruhig noch einen UNION hätte einbauen können :angle2: Der Vorteil bei "meinem" ist, daß man Dieses auch verwenden kann, um vorher zu Gucken, was man löschen würde ... falls man das mal wissen will. |
AW: Doppelte Datensätze löschen
Danke hat Perfekt funktioniert.
|
AW: Doppelte Datensätze löschen
Für die Zukunft evtl. die DB oder die BL umgestalten, damit keine Duplikate mehr auftreten können und Du NIE WIEDER so ein Script brauchst.
|
AW: Doppelte Datensätze löschen
Hallo Union,
die doppelten Datensätze sind durch einen Trigger neu angelegt worden, die ich bei der Übernahme von einer Datenbank in eine andere übernommen habe. Ich hatte gar nicht mehr an den Trigger grdacht. Doppelte Datensatz kann vom Anwender nicht erzeugt werden. Vielen Dank nochmals für Deine Hilfe. |
AW: Doppelte Datensätze löschen
Wäre das aber in der DB bereits unterbunden und nicht nur in der GUI, dann hätte der Trigger das auch nicht machen können. :angel:
|
AW: Doppelte Datensätze löschen
Und wie kann ich das verhindern? Etwa mit einem chek auf die Felder?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz