2013-02-12 2 views
7

Я пытаюсь вставить строки в таблицу «Данные», если они еще не существуют.SQL INSERT Отсутствуют строки из таблицы A в таблицу B

Для каждой строки в Export $ мне нужен код для проверки «данных» для строк, которые соответствуют периоду (дате) и идентификатору (int) - если строки еще не существуют, то они должны быть созданы.

Я уверен, что моя часть «НЕ СУЩЕСТВУЕТ» неправильная - какой лучший способ сделать это? Спасибо за вашу помощь

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

На первый взгляд вы не существует часть выглядит хорошо. Как вы думаете, что с этим не так? –

+0

Неправильно то, что это предотвратит вставку любых строк, если любые (возможно, другие) строки соответствуют (может быть много, которые могут быть импортированы). – GilM

+0

О! Вы пытаетесь вставить «отсутствующие записи» * из * 'Export $'? Если да, посмотрите 'MERGE'. Кроме того, '' между данными и экспортом есть CROSS JOIN - я рекомендую против такого синтаксиса. – 2013-02-12 23:53:51

ответ

9

попробовать это:

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

Работал отлично! Спасибо! –

5

попробовать что-то подобное, будет нуждаться в тонкой настройки в соответствии с вашими таблицами

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