Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Leute.

Ich habe mir einen netten Left Join zusammengebaut, der mir Datensätze ausgibt, die die referenzielle Integrität verletzen (Schlampiges DB-Design). Als ich die Datensätze endlich angezeigt bekommen habe hab' ich mich erstmal tierisch gefreut. Bis mir dann aufgefallen ist, daß ich die Datensätze auch löschen muss.

Hat irgendjemand eine einfache Idee, wie ich die Datensätze jetzt löschen kann?

Ich stehe irgendwie auf dem Schlauch!:(

Geschrieben

Wie waere es mit einem Subselect. Du bekommst wahrscheinlich u.a. einen PK zurueck in deiner Abfrage. Dann probiere mal folgendes:

DELETE FROM table

WHERE primary_key IN (SELECT p_k ....);

hth

Geschrieben

Ahh, verdammich!

Hatte ich auch erst so gedacht, was ich aber vergessen hatte (sowohl bei mir, als auch bei der Fragestellung): Ich habe einen zusammengesetzten Primärschlüssel.

Des hat mir dann auch das Hirn so verdreht!

Geschrieben

Ich glaub die einfachste Methode ist die, die kaputte Tabelle ohne Daten zu kopieren, darin die geeigneten Indices anzulegen, und schliesslich alle Daten aus der kaputten Tabelle über eine Abfrage zu übernehmen. Daten die den Index verletzen weden dann nicht übernommen.

Geschrieben

@Goos

Nee, anscheinend leider nicht. Theoretisch wäre das ja so wie DerMatze das erklärt hat ja möglich, so funktioniert es aber nur wenn man einen einfach Primärschlüssel hat. Wenn der nämlich zusammengesetzt ist, dann kann ich ja nicht noch einfach ein AND dranhängen und hoffen, daß es funzt, weil "das Zusammengesetzte" beim PK dann ja Fehlen würde.

Geschrieben

Schaut folgendermaßen aus:


SELECT
*
FROM
RwgWerte
LEFT JOIN
Rohstier
ON
(rwgwerte.Tierart = Rohstier.TierartNummer)
AND
(rwgwerte.Rohstoff = Rohstier.RohstoffNummer)
WHERE
rohstier.Tierartnummer is Null;
[/PHP]

Geschrieben

Falls du nen MSSQL Server hast sollte auch sowas funktionieren:

DELETE RwgWerte FROM
RwgWerte LEFT JOIN Rohstier
ON (rwgwerte.Tierart = Rohstier.TierartNummer)
AND (rwgwerte.Rohstoff = Rohstier.RohstoffNummer)
WHERE (rohstier.Tierartnummer is Null)[/PHP]

ob das allerdings auch auf anderen Systemen klappt weiss ich nicht :)

Goos

Geschrieben

Moin!

Ich war gestern den ganzen Tag unterwegs und konnte leider nicht gucken.

@Goos

Nee, des funzt net! Ich greife über die BDE auf eine Paradox-DB zu. Aber funktioniert das echt so auf einem SQL-Server? Ich meine beim DELETE wird ja nicht mal die normale SQL-Syntax eingehalten!?

Geschrieben

hi,

kann man in paradox mittels sql strings verketten? dann string dir einen eindeutigen identifizierer aus den einzelfeldern des pk zusammen und benutze den als "einspaltigen pk".

oder existiert der exists-operator?

dann:

delete from rwgwerte where exists 

(select 1 from rohstier 

where rohstier.tierartnummer = rwgwerte.tierartnummer 

and rohstier.rohstoffnummer = rwgwerte.rohstoffnummer)

hth...

Geschrieben
Original geschrieben von Pointerman

Nee, des funzt net! Ich greife über die BDE auf eine Paradox-DB zu. Aber funktioniert das echt so auf einem SQL-Server? Ich meine beim DELETE wird ja nicht mal die normale SQL-Syntax eingehalten!?

Habs gerade sogar mal kurz probiert....mit dem Ergebnis: ja der SQL-Server macht das.

Goos

Geschrieben

@Alle

Ich habe es aufgegeben das Problem mit einem einzigen SQL-Statement zu lösen. Weil ich in Delphi gearbeitet habe, hab ich das Problem gelöst indem ich einfach die "kaputten" Datensätze selectiert habe und diese dann mit einer Zweiten Abfrage aus der Tabelle gelöscht habe.

Trotzdem allen herzlichen Dank für die Mühen!

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...