AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Doppelte Datensätze löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Datensätze löschen

Ein Thema von Walter Landwehr · begonnen am 23. Feb 2015 · letzter Beitrag vom 24. Feb 2015
Antwort Antwort
Seite 1 von 2  1 2      
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#1

Doppelte Datensätze löschen

  Alt 23. Feb 2015, 18:25
Datenbank: Firebird • Version: 2.5.3 • Zugriff über: IBO
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.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Doppelte Datensätze löschen

  Alt 23. Feb 2015, 18:29
Hat die Tabelle TBL_PATDIAGNOSE eine eindeutige ID (PK)?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Doppelte Datensätze löschen

  Alt 23. Feb 2015, 18:47
Ja hat sie : PATDIAGNOSENR
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Doppelte Datensätze löschen

  Alt 23. Feb 2015, 18:56
Dann in etwa so:
Code:
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)
Also diejenigen Sätze löschen bei denen alle Vergleichsfelder übereinstimmen AUSSER dem ID-Feld.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Doppelte Datensätze löschen

  Alt 23. Feb 2015, 18:58
SQL-Code:
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
)
oder
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 where ID in (...) 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.


Oder so wie Union, der aber ruhig noch einen UNION hätte einbauen können

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.
$2B or not $2B

Geändert von himitsu (23. Feb 2015 um 19:02 Uhr)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Doppelte Datensätze löschen

  Alt 23. Feb 2015, 19:00
Danke hat Perfekt funktioniert.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Doppelte Datensätze löschen

  Alt 23. Feb 2015, 21:43
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Doppelte Datensätze löschen

  Alt 24. Feb 2015, 13:37
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.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Doppelte Datensätze löschen

  Alt 24. Feb 2015, 13:44
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Doppelte Datensätze löschen

  Alt 24. Feb 2015, 15:43
Und wie kann ich das verhindern? Etwa mit einem chek auf die Felder?
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz