# [SQL] Nur einen Datensatz löschen bei Verknüpfung



## poddix (20. Januar 2005)

Hi,

habe gerade ein Problem mit verknüpften Tabellen in SQL. Ich möchte Datensätze aus einer Tabelle löschen, die verknüpften Datensätze in einer anderen Tabelle aber erhalten. Habt ihr da nen Vorschlag

Meine Tabelle in der ich die Daten erhalten will wird so erzeugt:

CREATE TABLE public.dsch_adresse (
  matr_nr int4 NOT NULL, 
  plz varchar(10), 
  ort varchar(30), 
  str varchar(30), 
  hausnr varchar(5), 
  adr_typ varchar(1) NOT NULL, 
  CONSTRAINT dsch_adresse_pkey PRIMARY KEY (matr_nr, adr_typ), 
  CONSTRAINT "$1" FOREIGN KEY (matr_nr) REFERENCES dsch_student (matr_nr) ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE
) WITH OIDS;

Die andere Tabelle die zu löschende Datensätze hat:


CREATE TABLE public.dsch_student (
  matr_nr int4 NOT NULL, 
  vname varchar(30), 
  nname varchar(30), 
  geb_datum date, 
  abschluss float8, 
  CONSTRAINT dsch_student_pkey PRIMARY KEY (matr_nr)
) WITH OIDS;

Die Tabellen sind vorgegeben und sollen nicht geändert werden... Danke schonmal im Voraus.

Gruss
poddix


----------



## redlama (20. Januar 2005)

Also mit einem
	
	
	



```
DELETE FROM public.dsch_student WHERE matr_nr='...'
```
 kannst Du einen bestimmten Datensatz aus der Tabelle "public.dsch_student" löschen. Dabei wird die Tabelle "public.dsch_adresse" überhaupt nicht beachtet.
Meintest Du sowas?
Ansonsten wäre es hilfreich, wenn Du uns noch ein paar mehr Informationen gibtst.
Welchen Datensatz willst Du löschen? Musst Du zum löschen auf die andere Tabelle zugreifen? ...

redlama


----------



## poddix (20. Januar 2005)

Hi,

also mit DELETE FROM public.dsch_student WHERE .... bekomme ich natürlich den Datensatz aus der Tabelle aber auch die verknüpften Elemente bzw. Datensätze in den anderen Tabellen werde auch gelöscht. Ich bin noch Rookie in Sachen SQL. Aber ich denke durch die Vernüpfung :

CONSTRAINT dsch_adresse_pkey PRIMARY KEY (matr_nr, adr_typ), 
CONSTRAINT "$1" FOREIGN KEY (matr_nr) REFERENCES dsch_student (matr_nr) *ON DELETE CASCADE* ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE

werden alle Datensätze mit den entsprechenden matr_nr auch gelöscht. Bei mir ist das leider so wenn ich den Befehl ausführe.

Gruss
poddix


----------



## redlama (20. Januar 2005)

Dann sind die Tabellen also über die Matrikelnummer verknüpft?
Was passiert denn, wenn Du in der Tabelle, in der Du die Datensätze löschen willst, die matr_nr änderst? Ändert sie sich dann auch gleich in der anderen Tabelle mit?
wenn nicht, könntest Du die matr_nr z. B. auf "0000" setzen und dann den entsprechenden Datensatz für "0000" löschen. Dabei müssten dann ja die Daten der anderen Tabelle erhalten bleiben.

redlama


----------



## poddix (20. Januar 2005)

Hi,

die Idee war wirklich gut lässt sich so aber nicht umsetzen. Die Datensätze sind wirklich verknüpft und somit auch abhängig voneienander. 

Poddix


----------



## redlama (20. Januar 2005)

Dann weiß ich leider auch keinen Rat, tut mir Leid! 

redlama


----------

