Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Datenbanken

GELÖST

Ist das in einer SQL Query möglich

Mitglied: Closed

Closed (Level 1) - Jetzt verbinden

22.08.2008, aktualisiert 27.08.2008, 4119 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 ..
Ähnliche Inhalte
Datenbanken
SQL-Statement in Excel .dqy Query - (Zeitrahmen) funktioniert nicht ?
gelöst Frage von SchelinhoDatenbanken6 Kommentare

Hallo zusammen, folgendes Thema: ich habe ein SQL-Statement mit Variablen Usereingaben, welches im PL/SQL-Developer auch tadellos funktioniert. Die Variable ...

Datenbanken
SQL Anywhere: FOREACH möglich?
Frage von BirdyBDatenbanken4 Kommentare

Hallo zusammen und ein gutes neues Jahr, ich möchte gerne in unserem ERP-System, bzw. der Datenbank dahinter bestimmte Änderungen ...

Datenbanken
MS SQL: In einer Abfrage in Abhängigkeit von XYZ summieren SUM() - Als Query aus VBA heraus
gelöst Frage von AximandDatenbanken10 Kommentare

Hallo, ich brech mir gerade einen ab und hoffe, dass ihr mir helfen könnt. Ich habe eine Tabelle KHKLagerplatzbestaende. ...

Microsoft Office
Update query - Aktualisierungsabfrage
Frage von badni12Microsoft Office6 Kommentare

Hallo Habe zwei Tabellen, die eine Tabelle "x" ist eine reine Eingabetabelle mit unzähligen Feldern (darunter das Feld "Lieferant") ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 32 MinutenRouter & Routing

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 7 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 12 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...