2013-02-12 35 views
7

Próbuję wstawić wiersze do tabeli "Dane", jeśli jeszcze nie istnieją.SQL INSERT brakujące wiersze z tabeli A do tabeli B

Dla każdego wiersza w Export $, potrzebuję kodu, aby zaznaczyć "Dane" dla wierszy pasujących do okresu (data) i ID (int) - jeśli wiersze jeszcze nie istnieją, powinny zostać utworzone.

Jestem prawie pewna, że ​​moja część "NOT EXISTS" jest zła - jaki jest najlepszy sposób na zrobienie tego? Dzięki za pomoc

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

Na pierwszy rzut oka nie istnieje część swój wygląd ok. Co według ciebie jest z tym nie tak? –

+0

Co jest nie tak, to uniemożliwi wstawianie dowolnych wierszy, jeśli pasują (ewentualnie inne) wiersze (może być ich wiele, aby je zaimportować). – GilM

+0

Oh! Czy próbujesz wstawić "brakujące rekordy" * z * 'Export $'? Jeśli tak, spójrz na "MERGE". Ponadto, ',' między danymi i eksportami znajduje się CROSS JOIN - polecam przeciwko takiej składni. –

Odpowiedz

9

spróbuj tego:

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

Działa doskonale! Dziękuję Ci! –

5

spróbować coś takiego, będzie musiał szczypanie do swoich tablic

insert into data 
select * from export 
left join data on data.id = export.id 
        and data.period = export.period 
where data.id is null 
Powiązane problemy