SQL 插入到记录不存在的地方
SQL Insert Into Where Record Not Exists
我有一个每周将数据附加到 Table1
的自动化流程。它只有 4 列 [Reason, Number of Occurences, Sent Date, and Program]
。 Table1
不断增长,不关心重复记录。 (每周只有 26 条记录,只有 4 列,所以 performance/space 不是问题)
我还有一个 table Table2
,我只想要来自 Table1
的不同记录。如果记录已经存在于 Table 2
我不想插入记录。
我认为下面的语句会起作用,但它不起作用:
begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1]
where not exists (select * from [Database]..[Table2])
(0 row(s) affected)
如果我注释掉 WHERE 子句,它会起作用,但它会插入已经存在于 Table2
中的记录
begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1]
--where not exists (select * from [Database]..[Table2])
(83 row(s) affected)
如何检查 Table1
中的不同记录,如果该记录在 Table2
中不存在,请插入该记录?
我正在使用 MS SQL 服务器版本 11.0.6020.0
在SQL服务器中,您将使用except
。假设表具有相同的列:
insert into [Database]..[Table2]
select Distinct t1.*
from [Database]..[Table1] t1
except
select t2.*
from [Database]..[Table2] t2;
您的 not exists
子句与 table1
中的数据不相关,因此它没有达到您的预期。
我认为您也可以使用 MERGE 语句,它只有一个条件 WHEN NOT MATCHED BY TARGET 然后您将直接在目标 table.
中插入该行
注意:请考虑来源 table.
中的 DISTINCT 行
您需要在内部 select 添加一个额外的 WHERE 子句来比较表 2 和表 1 的记录:
begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1] t1
where not exists (
select * from [Database]..[Table2] t2
where t1.reason=t2.reason
AND t1.occurences=t2.occurences
AND t1.sent_date=t2.sent_date
AND t1.program=t2.program
)
我有一个每周将数据附加到 Table1
的自动化流程。它只有 4 列 [Reason, Number of Occurences, Sent Date, and Program]
。 Table1
不断增长,不关心重复记录。 (每周只有 26 条记录,只有 4 列,所以 performance/space 不是问题)
我还有一个 table Table2
,我只想要来自 Table1
的不同记录。如果记录已经存在于 Table 2
我不想插入记录。
我认为下面的语句会起作用,但它不起作用:
begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1]
where not exists (select * from [Database]..[Table2])
(0 row(s) affected)
如果我注释掉 WHERE 子句,它会起作用,但它会插入已经存在于 Table2
begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1]
--where not exists (select * from [Database]..[Table2])
(83 row(s) affected)
如何检查 Table1
中的不同记录,如果该记录在 Table2
中不存在,请插入该记录?
我正在使用 MS SQL 服务器版本 11.0.6020.0
在SQL服务器中,您将使用except
。假设表具有相同的列:
insert into [Database]..[Table2]
select Distinct t1.*
from [Database]..[Table1] t1
except
select t2.*
from [Database]..[Table2] t2;
您的 not exists
子句与 table1
中的数据不相关,因此它没有达到您的预期。
我认为您也可以使用 MERGE 语句,它只有一个条件 WHEN NOT MATCHED BY TARGET 然后您将直接在目标 table.
中插入该行注意:请考虑来源 table.
中的 DISTINCT 行您需要在内部 select 添加一个额外的 WHERE 子句来比较表 2 和表 1 的记录:
begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1] t1
where not exists (
select * from [Database]..[Table2] t2
where t1.reason=t2.reason
AND t1.occurences=t2.occurences
AND t1.sent_date=t2.sent_date
AND t1.program=t2.program
)