我正在连接两个数据库以进行数据迁移。我想检查第二个数据库中是否存在第一个数据库表中的记录。
即。从源数据库用户表我想将数据迁移到目标数据库用户表。
如果不存在,如何编写查询?
答案 0 :(得分:4)
insert into myTable
select * from myOldTable ot
where NOT EXISTS (select 1 from mytable t where t.ID = ot.ID)
您可能最好将其编写为连接
insert into myTable
select ot.*
from myOldTable ot
LEFT JOIN mtTable t
ON ot.ID = t.ID
WHERE t.ID IS NULL
或者根据您的数据库,合并可能会更好,有很多选项
答案 1 :(得分:3)
我发现以下语法最容易阅读:
insert TargetTable
(col1, col2)
from SourceTable as source
where not exists
(
select *
from TargetTable as duplicate
where source.col1 = duplicate.col1
and source.col2 = duplicate.col2
)
通常,您不必担心数据迁移期间的并发性。如果这样做,您可以指定锁定提示,例如with (tablock)
或更高transaction isolation level
。或者您可以按照建议使用merge
,但这有一个相当复杂的语法。
答案 2 :(得分:2)
SQL2003定义MERGE
,否则你可以使用{{1中的自然键在目标表中INSERT INTO ... SELECT
SELECT
LEFT JOIN
进行ON
}谓词,然后只是放在WHERE <column> IS NULL
。
答案 3 :(得分:0)
select * from db1.schema1.table1
intersect
select * from db2.schema2.table2