Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ist das in einer SQL Query möglich

Frage Entwicklung Datenbanken

Mitglied: Closed

Closed (Level 1) - Jetzt verbinden

22.08.2008, aktualisiert 27.08.2008, 4066 Aufrufe, 10 Kommentare

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
Mitglied: SnowStar
22.08.2008 um 08:47 Uhr
01.
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:
01.
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!
Bitte warten ..
Mitglied: AndreasHoster
22.08.2008 um 09:01 Uhr
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:
01.
ALTER TABLE [dbo].[Test1] ADD  
02.
	CONSTRAINT [FK_Test1_Test] FOREIGN KEY  
03.
04.
		[ID] 
05.
	) REFERENCES [dbo].[Test] ( 
06.
		[ID] 
07.
	) ON DELETE CASCADE 
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)
Bitte warten ..
Mitglied: Closed
22.08.2008 um 10:19 Uhr
sorry hatte vergessen zu erwähnen, dass es sich um eine mysql db handelt. werde das von snowstar dargelegte beispiel mal testen, da ich mirnicht sicher bin ob das beispiel von andreas auf einer mysql db klappt.

aber vielen dank schonmal. melde mich wenns funktioniert hat
Bitte warten ..
Mitglied: Closed
22.08.2008 um 12:06 Uhr
hätte jetzt folgenden string:

DELETE FROM tblmeeting, tblkommentar WHERE (tblkommentar.meetingID=tblmeeting.id) AND tblmeeting.id=6;

da bekomme ich eine fehlermeldung, dass die syntax falsch sei. müsste aber eigentlich genauso sein, wie du geschrieben hast, stefan, oder?

danke schonmal
Bitte warten ..
Mitglied: SnowStar
22.08.2008 um 12:38 Uhr
01.
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:
01.
DELETE a.*, b.* FROM 
02.
// LÖSCHE VON a und b ALLES (.*) 
03.
 tblmeeting a, tblkommentar b 
04.
// a IST DIE TABELLE tblmeeting, b IST DIE TABELLE tblkommentar  
05.
WHERE (a.id = 6) AND (b.meetingID = a.id); 
06.
// WO a.id = 6 UND b.meetingID = a.id ...
Bitte warten ..
Mitglied: Closed
22.08.2008 um 16:24 Uhr
super das funktioniert einwandfrei. denke dass dieses verfahren auch auf mehr als zwei tabellen übertragbar ist.


vielen dank
Bitte warten ..
Mitglied: SnowStar
22.08.2008 um 18:44 Uhr
01.
DELETE a.*, b.*, c.* FROM tblmeeting a, tblkommentar b, nocheinetabelle c WHERE (a.id = 6) AND (b.meetingID = a.id) AND (c.sonstwas = a.id);
Hoffe ich
Bitte warten ..
Mitglied: Closed
27.08.2008 um 09:54 Uhr
hi, also wie gesagt das klappt soweit ganz gut, allerdings auch NUR wenn auch kommentare zu dem erfasseten datensatz vorhanden sind bzw die WHERE Klausel halt zutrifft. ginge es auch irgendwie, dass der Datensatz von tabelle a gelöscht wird, ohne dass in Tabelle b ein Kommentar zu dem Datensatz aus Tabelle a erfasst wurde?
Bitte warten ..
Mitglied: SnowStar
27.08.2008 um 12:45 Uhr
Ist vollkommen richtig.
Alternativ bleibt dir dann nur das weiter oben aufgeführte ...
01.
ALTER TABLE [dbo].[Test1] ADD  
02.
	CONSTRAINT [FK_Test1_Test] FOREIGN KEY  
03.
04.
		[ID] 
05.
	) REFERENCES [dbo].[Test] ( 
06.
		[ID] 
07.
	) ON DELETE CASCADE 
umgesetzt auf deine Tabellen. So löscht der MySQL dann alles, was vorhanden ist, sobald du einen Benutzer löscht.
Bitte warten ..
Mitglied: Closed
27.08.2008 um 13:36 Uhr
habe jetzt mal eine sehr unsaubere lösung gemacht, die aber funktioniert:

abfrage auf die db und rückgabe aller datensätze in tblkommentar, die die id des zu löschenden datensatzes beinhalten von der anderen tabelle (notizen beispielsweise o.ä.)

dann abfrage der anzhal und for schleife, in der alle datensätze in der tblkommentar gelöscht werden. danach wird der eigentliche datensatz gelöscht

wie gesagt: recht unschön, aber funktioniert. danke stefan
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
gelöst SQL Server - erst Downgrade und danach ein Upgrade möglich? (3)

Frage von Sachellen zum Thema Windows Server ...

Festplatten, SSD, Raid
Performancesteigerung des RAID Arrays möglich? (13)

Frage von takvorian zum Thema Festplatten, SSD, Raid ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...