Sql 当源表没有外键约束时,如何避免在目标表中插入重复记录
通过映射和检查条件,我们通常可以使用合并查询/连接查询来避免重复插入目标表。但是我们如何在没有外键约束的情况下处理以避免重复插入呢 表A-目标表Sql 当源表没有外键约束时,如何避免在目标表中插入重复记录,sql,sql-server,Sql,Sql Server,通过映射和检查条件,我们通常可以使用合并查询/连接查询来避免重复插入目标表。但是我们如何在没有外键约束的情况下处理以避免重复插入呢 表A-目标表 +--------+--------+-----------+-----------+------------+ | Id | RecNo | Name | Salary | Date | +--------+--------+-----------+-----------+------------+ |anyGu
+--------+--------+-----------+-----------+------------+
| 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 |
+--------+--------+-----------+-----------+------------+
表B-源温度表
+--------+--------+-----------+------------+
| 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
中已经存在的行
示例:不应将源表B的第一条记录插入表A
注意:表A和表B之间没有外键
我们怎样才能巧妙地处理这个案子?请给我一些建议
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)
这假设RecNo提供唯一性。左外部联接将匹配两个表之间具有相同RecNo的记录,where条件(a.RecNo为NULL)将查找TableB中不存在于TableA中的记录
这假设RecNo提供唯一性。左侧外部联接将匹配两个表之间具有相同RecNo的记录,where条件(a.RecNo为NULL)将查找表B中不存在于表a中的记录。为什么不添加外键?听起来你无论如何都想强制执行它,为什么不把它添加到你的系统中呢?这就是它们存在的原因。为什么不添加外键呢?听起来你无论如何都想强制执行它,为什么不把它添加到你的系统中呢?这就是它们存在的原因。
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