Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nochmals ein Delete From Problem (https://www.delphipraxis.net/31985-nochmals-ein-delete-problem.html)

Jelly 16. Okt 2004 17:22


Nochmals ein Delete From Problem
 
Ich hatte kürzlich in diesem Thread ein Löschproblem, und kriegte auch prompt dafür eine Lösung geboten.

Jetzt hab ich ein noch anderes Problem, was ich hier mal schildern will:

Man nehme eine Tabelle Projekte, eine Tabelle Kunden. Inhalt von beiden ist selbsterklärend.

Dann gibts noch eine Tabelle KundenProjekte, welche eine Zwischentabelle darstellt, weil ich unter Kunden und Projekte eine n:n Beziehung habe, also ein Kunde kann mehrere Projekte besitzen, sowie ein Projekt von mehreren Kunden gekauft werden kann.

Soweit klar?

jetzt möchte ich ein Projekt X aus der Datenbank löschen. Das Löschen in KundenProjekte ist sehr simpel. Aber anschliessend kann es passieren, daß es Einträge in der Tabelle Kunden gibt, die jedoch in keiner Beziehung zu irgendeinem Projekt stehen. Diese Kundenleichen rauszufinden ist auch noch einfach, über folgende Abfrage:
SQL-Code:
select count(kp.ID) as Anzahl, k.Name, k.Vorname
FROM rm_kunden k left join rm_kundenprojects kp on kp.Kunde = k.ID
group by k.Name, k.Vorname
having count(kp.ID) = 0
Ergibt mir eine Liste der Kunden, die jetzt keine Projekte mehr besitzen.

Und genau diese Einträge will ich löschen, nur krieg ich das mal wieder nicht in eine
SQL-Code:
delete from rm_kunden ...
Anweisung umgesetzt.

Aber dazu noch gleich eine allgemeine Frage zu solchen Problemen: Ist es überhaupt angebracht, diese Daten zu löschen? Oder belass ich vielleicht doch lieber die Kundenleichen in der Datenbank? Was meint ihr?

Alles nicht so einfach :roll:

Robert_G 16. Okt 2004 17:35

Re: Nochmals ein Delete From Problem
 
Jedes richtige DBMS würd das...
SQL-Code:
DELETE
FROM  rm_kunden del
WHERE del.ID not in (SELECT sQ.Kunde
                      FROM  rm_kundenprojects sQ)
... können.
MySQL ist dafür wahrscheinlich wieder zu doof. :roll:

Zitat:

Zitat von Jelly
Aber dazu noch gleich eine allgemeine Frage zu solchen Problemen: Ist es überhaupt angebracht, diese Daten zu löschen? Oder belass ich vielleicht doch lieber die Kundenleichen in der Datenbank? Was meint ihr?

Ich würde sie drin lassen. (Als Optimist denke ich: Die kommen wieder. :) ) Da du aber ständig über SubQueries stolpern wirst, würde es in mySQL zur Folter werden. ;)

Jelly 16. Okt 2004 17:42

Re: Nochmals ein Delete From Problem
 
Zitat:

Zitat von Robert_G
Jedes richtige DBMS würd das...
SQL-Code:
DELETE
FROM  rm_kunden del
WHERE del.ID not in (SELECT sQ.Kunde
                      FROM  rm_kundenprojects sQ)
... können.
MySQL ist dafür wahrscheinlich wieder zu doof. :roll:

Ich weiss ich weiss :angel2: Versteh ja auch nicht wie MySQL überhaupt so populär werden konnte... Keine Subselects, keine Views, keine Stored Procedures, keine Trigger, kein "Cascade Delete". :wall: Da kriegst de echt en Rappel :kotz:

Aber trotzdem muss ich irgendeine Lösung finden... Aber vielleicht hast du Recht, und ich lass die Kunden einfach in der Tabelle drin stehen.

Robert_G 16. Okt 2004 18:03

Re: Nochmals ein Delete From Problem
 
Wenn ich die Syntax eines mySQL DELLETEs laut diesem Beitrag richtig deduziere, könnte das so aussehen:
Einfach Copy'nPaste deines SELECTs + ein bissl DELETE :stupid: , ich habe nicht viel Ahnung von mySQL. (rate mal warum. :P )
SQL-Code:
DELETE k.*
FROM  rm_kunden k left join rm_kundenprojects kp on kp.Kunde = k.ID
GROUP BY k.Name, k.Vorname
HAVING Count(kp.ID) = 0
Sowas würde ich persönlich niemals verwenden können. (Mir rollen sich da schon beim Lesen die Fussnägel auf. :roll: )

Jelly 16. Okt 2004 18:20

Re: Nochmals ein Delete From Problem
 
Zitat:

Zitat von Robert_G
(Mir rollen sich da schon beim Lesen die Fussnägel auf. :roll: )

Nicht nur dir, sondern auch dem MySQL Server :wink:
Das hatt ich auch schon versucht, gibt mir aber eine Fehlermeldung zurück.

Stevie 18. Okt 2004 08:15

Re: Nochmals ein Delete From Problem
 
Hehe, irgendwie seid ihr mit der MySQL-Syntax auf Kriegsfuß, was? :wink:
SQL-Code:
DELETE kunden.* FROM kunden LEFT OUTER JOIN kundenprojekte ON kunden.kunde_id = kundenprojekte.kunde_id WHERE kundenprojekte.kunde_id IS NULL


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 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-2025 by Thomas Breitkreuz