Ist das in einer SQL Query möglich
hallo,
ich habe ien datenbankstruktur, die in etwa folgende tabellen enthält: projekte, kunden, kommentare, notizen ,etc.
jetzt ist es so, dass in der tabelle projekte natürlich eine kundeid vorhanden ist, um diese zu verbinden. des weiteren ist in der tabelle kommentare natürlich auch eine zuordnung zu der tabelle notizen (unter anderem) und projekte.
jetzt möchte ich folgendes machen: wenn ein user einen kunden löscht, sollen alle projekte, die dem kunden zugeordnet wurden gelöscht werden und alle kommentare, notizen und sonstige elemente.
wie gehe ich am besten an dieses problem heran?
hoffe ich habe es einigermaßen gut beschrieben
danke schonmal
ich habe ien datenbankstruktur, die in etwa folgende tabellen enthält: projekte, kunden, kommentare, notizen ,etc.
jetzt ist es so, dass in der tabelle projekte natürlich eine kundeid vorhanden ist, um diese zu verbinden. des weiteren ist in der tabelle kommentare natürlich auch eine zuordnung zu der tabelle notizen (unter anderem) und projekte.
jetzt möchte ich folgendes machen: wenn ein user einen kunden löscht, sollen alle projekte, die dem kunden zugeordnet wurden gelöscht werden und alle kommentare, notizen und sonstige elemente.
wie gehe ich am besten an dieses problem heran?
hoffe ich habe es einigermaßen gut beschrieben
danke schonmal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 95056
Url: https://administrator.de/forum/ist-das-in-einer-sql-query-moeglich-95056.html
Ausgedruckt am: 23.12.2024 um 07:12 Uhr
10 Kommentare
Neuester Kommentar
SELECT a.*, b.* FROM kunden a, projekte b WHERE (a.idkunde = kundenid) AND (b.idkunde = a.idkunde);
Sollte dir alle Spalten von a (also Tabelle kunden) und b (also Tabelle projekte) zurückgeben, die zum Kunden kundenid gehören.
Entsprechend müsste das Query fürs DELETE lauten:
DELETE a.*, b.* FROM kunden a, projekte b WHERE (a.idkunde = kundenid) AND (b.idkunde = a.idkunde);
Wobei natürlich die kundenid noch gesetzt werden muss
Ist übrigens auf MySQL bezogen, ich weiss nicht, inwiefern das auch auf MSSQL anwendbar ist!
Wenn Dein Datenbanksystem es unterstützt, würde ich die Tabellen gleich mit referentieller Integrität und Löschweitergabe definieren, dann kümmert sich der Server selbsttätig drum, daß in den Projekt, Notiz, Sonstwas Tabellen nur Datensätze drin sind, die zu Kunden aus der Kundentabelle gehören.
Beispiel bei einem MS SQL 2000:
Legt fest, daß es in Test1.ID nur Werte geben darf die in Test.ID auch drin sind (Foreign Key) und das die Zeilen in Test1 gelöscht werden, falls der Key in Test gelöscht wird (On Delete Cascade)
Beispiel bei einem MS SQL 2000:
ALTER TABLE [dbo].[Test1] ADD
CONSTRAINT [FK_Test1_Test] FOREIGN KEY
(
[ID]
) REFERENCES [dbo].[Test] (
[ID]
) ON DELETE CASCADE
DELETE a.*, b.* FROM tblmeeting a, tblkommentar b WHERE (a.id = 6) AND (b.meetingID = a.id);
Du musst den Tabellen quasi "neue" Namen zuweisen (im Beispiel a und b) und die entsprechenden Felder dann mit a. und b. benennen!
Kurzum sagt das Query:
DELETE a.*, b.* FROM
// LÖSCHE VON a und b ALLES (.*)
tblmeeting a, tblkommentar b
// a IST DIE TABELLE tblmeeting, b IST DIE TABELLE tblkommentar
WHERE (a.id = 6) AND (b.meetingID = a.id);
// WO a.id = 6 UND b.meetingID = a.id ...
Ist vollkommen richtig.
Alternativ bleibt dir dann nur das weiter oben aufgeführte ...
umgesetzt auf deine Tabellen. So löscht der MySQL dann alles, was vorhanden ist, sobald du einen Benutzer löscht.
Alternativ bleibt dir dann nur das weiter oben aufgeführte ...
ALTER TABLE [dbo].[Test1] ADD
CONSTRAINT [FK_Test1_Test] FOREIGN KEY
(
[ID]
) REFERENCES [dbo].[Test] (
[ID]
) ON DELETE CASCADE