Pointerman Geschrieben 21. Januar 2004 Teilen Geschrieben 21. Januar 2004 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerMatze Geschrieben 21. Januar 2004 Teilen Geschrieben 21. Januar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 21. Januar 2004 Autor Teilen Geschrieben 21. Januar 2004 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maxim_42 Geschrieben 21. Januar 2004 Teilen Geschrieben 21. Januar 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 21. Januar 2004 Teilen Geschrieben 21. Januar 2004 Hmmm wieso kannst deinen Left Join nicht in dein Delete uebernehmen? Is mir gerade irgendwie etwas unverstaendlich. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 21. Januar 2004 Autor Teilen Geschrieben 21. Januar 2004 @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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 21. Januar 2004 Teilen Geschrieben 21. Januar 2004 Hmmm ja wie schaut dein Left Join denn nun ueberhaupt genau aus? Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 21. Januar 2004 Autor Teilen Geschrieben 21. Januar 2004 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 21. Januar 2004 Autor Teilen Geschrieben 21. Januar 2004 Ich hab heute nicht mehr die Möglichkeit ins Netz zu gucken, bin aber immer noch auf der Suche nach einer Lösung! Danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 21. Januar 2004 Teilen Geschrieben 21. Januar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 23. Januar 2004 Autor Teilen Geschrieben 23. Januar 2004 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!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 23. Januar 2004 Teilen Geschrieben 23. Januar 2004 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 23. Januar 2004 Teilen Geschrieben 23. Januar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 23. Januar 2004 Autor Teilen Geschrieben 23. Januar 2004 @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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.