_hkl: verschachteltes MySQL-Query

Beitrag lesen

Hallo Daniel !

Mal ein paar Dinge vorab:

  • kat_id ist ein Fremdschlüssel.
      Bei der Datendefinition ("CREATE TABLE tab1 ... FOREIGN KEY kat_id REFERENCES kategorien(id)") kann angegeben werden ob
      abhängige Datensätze (in tab1) beim Löschen eines Satzes mitgelöscht werden sollen (Zusatz "ON DELETE CASCADE" ) oder das Löschen des Satzes aus kategorien ganz verhindert werden soll (Zusatz "ON DELETE RESTRICT" )
    Wenn, wie hier offenabr keine der beiden Möglichkeiten zum Tragen kommt kann es sein, dass entweder
  • Die Tabelle tab1 eine (MYSQL)MyISAM Tabelle ist; MyISAM verwaltet solche Beziehungen nicht; MySQL kennt hierzu den Typ "InnoDB"
  • Die Fremdschlüssel auf NULL gesetzt wurden

Der resultierende Effekt kann aber vom Entwickler der Datenbank durchaus beabsichtigt sein !!!
Also : Vorsicht !
;-)

"SELECT * FROM tab1 WHERE kat_id IN SELECT id FROM kategorien;"

Das loescht nicht wirklich und ist syntaktisch falsch.

"SELECT * FROM tab1 WHERE kat_id IN (SELECT id FROM kategorien);"
Das ist syntaktisch richtig, selektiert aber falsch.

"SELECT * FROM tab1 WHERE kat_id NOT IN (SELECT id FROM kategorien);"
Das ist syntaktisch richtig und selektiert richtig, loewscht aber nicht...

=> "DELETE FROM tab1 WHERE kat_id NOT IN (SELECT id FROM kategorien);"
=> "COMMIT;"

...und das ist das was Du suchst.
;-)

Grüsse

hkl

funktioniert nicht :(

MfG