2013-02-12 13 views
7

Ich versuche, Zeilen in Tabelle 'Data' einzufügen, wenn sie nicht bereits vorhanden sind.SQL INSERT fehlende Zeilen von Tabelle A zu Tabelle B

Für jede Zeile in Export $, ich brauche den Code, um 'Daten' für Zeilen zu überprüfen, die sowohl Periode (Datum) und eine ID (int) entsprechen - wenn die Zeilen nicht bereits vorhanden sind, sollten sie erstellt werden.

Ich bin mir ziemlich sicher, dass mein 'NOT EXISTS' Teil falsch ist - was ist der beste Weg, dies zu tun? Vielen Dank für Ihre Hilfe

IF NOT EXISTS (SELECT * FROM Data, Export$ WHERE Data.ID = Export$.ID AND Data.Period = Export$.Period) 
    INSERT INTO Data (Period, Performance, ID) 
    SELECT Period, [Return], [ID] FROM Export$ 
+1

Auf den ersten Blick Ihr nicht Teil ok aussehen existiert. Was denkst du ist falsch damit? –

+0

Was falsch ist, ist, dass dies das Einfügen von Zeilen verhindert, wenn irgendwelche (möglicherweise andere) Zeilen übereinstimmen (es könnte viele geben, die in Ordnung sind). – GilM

+0

Oh! Versuchen Sie "fehlende Datensätze" * aus * 'Export $' einzufügen? Wenn ja, schau nach "MERGE". Auch das ',' zwischen Daten und Exports gibt es einen CROSS JOIN - ich empfehle eine solche Syntax. –

Antwort

9

versuchen, dies zu passen:

INSERT INTO Data (Period, Performance, ID) 
SELECT Period, [Return], [ID] 
FROM Export$ e 
where not exists (
select * 
from Data 
where ID = e.ID and Period = e.Period) 
+0

Arbeitete perfekt! Vielen Dank! –

5

versuchen so etwas wie, müssen zwicken Ihre Tabellen

insert into data 
select * from export 
left join data on data.id = export.id 
        and data.period = export.period 
where data.id is null 
Verwandte Themen