2013-02-12 2 views
7

Tôi đang cố chèn hàng vào bảng 'Dữ liệu' nếu chúng chưa tồn tại.SQL INSERT thiếu hàng từ Bảng A đến Bảng B

Đối với mỗi hàng xuất $, tôi cần mã để kiểm tra 'Dữ liệu' cho các hàng khớp với cả Thời gian (ngày) và ID (int) - nếu các hàng không tồn tại thì chúng sẽ được tạo.

Tôi khá chắc chắn phần 'NOT EXISTS' của tôi là sai - cách tốt nhất để làm điều này là gì? Cảm ơn tất cả sự giúp đỡ của bạn

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

Thoạt nhìn của bạn không tồn tại một phần trông ok. Bạn nghĩ gì sai với nó? –

+0

Có gì sai là điều này sẽ ngăn chặn chèn bất kỳ hàng nào nếu có (có thể có các hàng khác) khớp nhau (có thể có nhiều hàng để nhập). – GilM

+0

Ồ! Bạn đang cố chèn "bản ghi thiếu" * từ * 'Xuất $ '? Nếu có, hãy tra cứu 'MERGE'. Ngoài ra, ',' giữa dữ liệu và xuất khẩu có một CROSS JOIN - tôi khuyên bạn nên chống lại cú pháp như vậy. –

Trả lời

9

thử điều này:

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

Đã hoạt động hoàn hảo! Cảm ơn bạn! –

5

thử một cái gì đó như thế nào, sẽ không cần tinh chỉnh để phù hợp với bảng của bạn

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