SQL插入到使用Union应该只添加不同的值

use*_*140 5 sql t-sql sql-server

所以我有这个临时表,结构如下:

col1    col2    col3    col3
intID1  intID2  intID3  bitAdd
Run Code Online (Sandbox Code Playgroud)

我正在将这个临时表的值与一个select查询联合起来并将它存储到同一个临时表中.事情是col3不是union查询的一部分我稍后将需要它来更新表.

所以我这样做:

Insert into  #temptable
(
intID1,
intID2,
intID3
)
select intID1,intID2,intID3
From
#temptable

UNION

select intID1,intID2,intID3
From
Table A
Run Code Online (Sandbox Code Playgroud)

问题是我只想要添加临时表中尚不存在的行.这样做会添加已存在行的副本(因为union将返回一行)如何只插入那些行而不是存在于我的联合查询中的当前临时表中?

Dan*_*rth 9

用途MERGE:

MERGE INTO #temptable tmp
USING (select intID1,intID2,intID3 From Table A) t
ON (tmp.intID1 = t.intID1 and tmp.intID2 = t.intID2 and tmp.intID3 = t.intID3)
WHEN NOT MATCHED THEN
INSERT (intID1,intID2,intID3)
VALUES (t.intID1,t.intID2,t.intID3)
Run Code Online (Sandbox Code Playgroud)


Joa*_*son 7

很好,很简单 EXCEPT

INSERT INTO  #temptable (intID1, intID2, intID3)
SELECT intID1,intID2,intID3 FROM TableA
EXCEPT
SELECT intID1,intID2,intID3 FROM #temptable
Run Code Online (Sandbox Code Playgroud)