Hello,
der Query soll alle Einträge in tab_produkte löschen, für deren ID_Kategorie es keine Kategorie mehr gibt, also keinen Datensatz mehr in der tab_kategorien mit eben diesem _kategorie-ID:
das nennt man auch Integritätstest
Du kannst Dir das so vorstellen:
Welche Datensätze sollen aus der Ergebismenge von PRODUKT aussortiert werden?
Die Ergebnismenge ist diejenige, die Du löschen willst.
Aus der musst Du daher vorher diejenigen aussortieren, die _nicht_ gelöscht werden sollen.
select ID_PRODUKT from PRODUKT where PRODUKT.ID_PRODUKT = KATEGORIE.ID_KATEGORIE;
Für diese Produkte gibt es also eine Kategorie. WIr wollen sie behalten!
Und dann sagst Du, dass Du gerade das Gegenteil davon haben willst:
select ID_PRODUKT from PRODUKT
left join KATEGORIE on (PRODUKT.ID_KATEGORIE = KATEGORIE.ID_KATEGORIE) where KATEGORIE.ID_KATEGORIE is NULL order by PRODUKT.ID_PRODUKT;
left Join bedeutet soviel wie:
Die linke Tabelle wird vollständig durchlaufen, die rechte folgt
Wenn in der rechten aber der Zeiger auf NULL steht, wurde kein Partner gefunden.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
