Daten über verknüpfte Tabellen löschen.

visiondpc

Erfahrenes Mitglied
Hi, SQL ist bei mir schon etwas her und ich wusste auch nicht genau wonach ich suchen sollte deswegen frag ich lieber direkt hier.

Ich habe in einer MySQL DB 2 Tabelle, die miteinander verknüpft sind.

Tabelle referenzen:
referenz_id, name, ....

Tabelle referenzen_kategorien:
referenz_id, kategorie_id

Jetzt sollen in der Tabelle referenzen alle Datensätze gelöscht werden, die in referenzen_kategorien der Kategorie 2 zugeordnet sind.

Mein Überlegungen waren
Code:
DELETE 
FROM referenzen
WHERE referenzen.referenz_id=referenzen_kategorien.referenz_id
AND referenzen_kategorien.kategorie_id='2'

Code:
DELETE
FROM
referenzen
WHERE
referenzen.referenz_id 
IN (SELECT
referenz_id
FROM
referenzen r, referenzen_kategorien k
WHERE
r.referenz_id=k.referenz_id
AND
k.kategorie_id=2)
Hat natürlich nicht funktioniert. Kann mir jemand verraten wie es geht?
Danke schonmal im Vorraus.
 
Hallo,

war doch schon fast richtig:

SQL:
DELETE FROM referenzen
 WHERE referenz_id IN 
    (SELECT referenz_id
       FROM referenzen_kategorien
      WHERE kategorie_id=2)

Innerhalb deiner 2.Query war die Spalte referenz_id nicht eindeutig (weil sie in beiden Tabelle vorkommt) und darüber hinaus war der Join in der Subquery unnötig.

Markus
 
Hallo visiondpc,

Falls reference_id in der Tabelle referenzen_kategorien als Foreign Key refernziert wurde (was ich stark vermute), wird das immer noch nicht klappen, da du die Integrität verletzt:
Du versuchst einen Eintrag zu löschen, der als Foreign Key eingetragen ist.

D.H dass du zuerst den Eintrag in der Tabelle referencen löschen musst...

Grüsse, Tecla

Vergiss es
Hab grad gemerkt, das du ja genau das versuchts...
 
Zuletzt bearbeitet:
Danke Ihr beiden.

Das mit der Eindeutigkeit in der 2. Query war schon gegeben. Ich hatte mich beim eintragen hier nur vertippt. Sorry.
Auf jedenfall hat es mit Deiner Abfrage geklappt. Danke nochmal.
 
Zurück