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