我们通常可以通过映射和检查条件使用合并查询/连接查询来避免重复插入目标表。但是如何在没有外键约束的情况下处理以避免重复插入。
TableA - 目标表
+--------+--------+-----------+-----------+------------+
| Id | RecNo | Name | Salary | Date |
+--------+--------+-----------+-----------+------------+
|anyGuid |Guid1 | Name1 | 10000 | 19-07-2015 |
|anyGuid |Guid2 | Name2 | 20000 | 20-07-2015 |
|anyGuid |Guid3 | Name3 | 30000 | 19-07-2015 |
+--------+--------+-----------+-----------+------------+
TableB - 源临时表
+--------+--------+-----------+------------+
| RecNo | Name | Salary | Date |
+--------+--------+-----------+------------+
|Guid3 |Name3 | 30000 | 19-07-2015 |
|Guid4 |Name4 | 40000 | 20-07-2015 |
|Guid5 |Name5 | 40000 | 21-07-2105 |
+--------+--------+-----------+------------+
现在,我需要将TableB
中的所有行插入到TableA
目标表中,但不应插入TableA
中已存在的行。
示例:不应将源TableB的第一条记录插入TableA。
注意: TableA和TableB之间没有外键。
我们如何巧妙地处理这个案子?建议请。
答案 0 :(得分:0)
INSERT INTO TableA (ID, RecNo, Salary, [Date])
SELECT RecNo, Name, Salary, [Date]
FROM TableB B
WHERE NOT EXISTS (SELECT 1
FROM TableA
WHERE B.Name = RecNo)
答案 1 :(得分:0)
INSERT INTO TableA (RecNo, Name, Salary, Date)
SELECT b.RecNo, b.Name, b.Salary, d.Date
FROM TableB b
LEFT OUTER JOIN TableA a ON a.RecNo = b.RecNo
WHERE a.RecNo IS NULL
这假设RecNo提供唯一性。左外连接将匹配两个表之间具有相同RecNo的记录,where条件(a.RecNo IS NULL)将查找TableB中不存在于TableA中的记录。