INSERT INTO T_LS (FULLPATH, DIRNAME, LEVEL, FIRSTDETECTED, LASTVERIFIED) -- soweit klar: nach T_LS inserten, und zwar das, was das folgende SELECT zurückgibt SELECT -- Korrektur: Hier haben vorhin die Tabellennamen gefehlt. Das hätte nicht funktioniert, -- weil die Spaltennamen in beiden Tabellen vorkommen und also nicht eindeutig sind. T_LS_TMP.FULLPATH , T_LS_TMP.DIRNAME , T_LS_TMP.LEVEL , T_LS_TMP.FIRSTDETECTED , T_LS_TMP.LASTVERIFIED FROM T_LS_TMP -- left outer join heißt: selecte von der linken Tabelle (also T_LS_TMP) alle Datensätze -- und von der rechten alle, die nach den join-Kriterien (Bedingungen wie in einer WHERE- -- Klausel) übereinstimmen. Das heißt, die linke Tabelle wirkt als Filter auf die rechte -- aber nicht umgekehrt. -- Ich bekomme also zunächst alle Datensätze aus T_LS_TMP und dazu Daten aus T_LS von den -- den join-Kriterien entsprechenden Datensätzen (außer der Bedingung, die die Überein- -- stimmung prüft habe ich noch eine Bedingung eingebaut, die auf Aktualität prüft, denn -- wenn ein Verzeichnis in der Vergangenheit schon einmal existiert hat, dann aber gelöscht -- und jetzt neu wieder angelegt wurde, soll es in T_LS doppelt erscheinen - mit einander -- nicht überschneidenden Zeitintervallen). left outer join T_LS on T_LS_TMP.FULLPATH=T_LS.FULLPATH and T_LS.LASTVERIFIED = (SELECT max(LASTVERIFIED) FROM T_LS) WHERE -- Da ich aber nur die haben will, die in der Zieltabelle nicht schon enthalten sind, filtere -- ich jetzt alle diejenigen Datensätze aus, die in der Zieltabelle enthalten sind. T_LS.FULLPATH IS NULL;