2013-08-16 29 views
0

右鍵我需要將以下數據插入名爲locals的表中,但我只想插入它,如果街道字段尚未存在於本地表。在數據和字段如下:如何將多個值插入行中,如果1字段不同

Street PC  Locality 
------------------------------ 
Street1 ABC xyz A 
Street2 DEF xyz B 

等等,但我想插入當地人表,如果該街場是不是已經存在於當地人表。

我想用下面的:

INSERT 
    INTO Locals (Street,PC,Locality) 
     (
      SELECT DISTINCT s.Street 
       FROM Locals_bk s 
      WHERE NOT EXISTS (
         SELECT 1 
         FROM Locals l 
         WHERE s.Street = l.Street 
        ) 
     ) 
    ; 

但我意識到,只會插入街頭場不在同一行的數據的其餘部分。

+0

不locals_bk S和當地人有相同的列? – zxc

回答

3
insert into Locals (Street, PC, Locality) 
select b.Street, b.PC, b.Locality 
from Locals_bk as b 
where not exists (select * from Locals as t where t.street = b.street) 

insert into Locals (Street, PC, Locality) 
select b.Street, b.PC, b.Locality 
from Locals_bk as b 
where b.street not in (select t.street from Locals as t) 
+0

像我的,但更快+1 – Jodrell

0

下獲取從任意行街匹配所需字段:

insert into Locals (Street, PC, Locality) 
select s.Street, s.PC, s.Locality 
from (select s.*, row_number() over (partition by s.Street order by (select NULL)) as seqnum 
     from Locals_bk s 
    ) s 
where seqnum = 1 and 
    NOT EXISTS (SELECT 1 
        FROM Locals l 
        WHERE s.Street = l.Street); 

如果你知道的值總是相同的,你可以做:

insert into Locals (Street, PC, Locality) 
select distinct s.Street, s.PC, s.Locality 
from Locals_bk s 
where NOT EXISTS (SELECT 1 
        FROM Locals l 
        WHERE s.Street = l.Street); 
1

如何約

INSERT [Locals] 
SELECT 
      [Street], 
      [PC], 
      [Locality] 
    FROM 
      [Locals_bk] bk 
    WHERE 
     NOT EXIST (
      SELECT * FROM [Locals] l WHERE l.[Street] = bk.[Street] 
     ); 
1

您可以使用NOT IN:

INSERT into Locals (Street,PC,Locality) 
    SELECT s.Street, s.PC, s.Locality 
    FROM Locals_bk as s 
    WHERE NOT IN (SELECT * FROM Locals as t WHERE t.street = s.street) 
+0

我認爲你的意思是's.street不在(從本地選擇t.street作爲t)' –

+0

是@Roman Pekar –

相關問題