SQL不插入重复项
问题描述:
我一直在寻找解决方案来实现最佳实现,如果该行已经存在,则不要插入。我已经阅读了很多答案,这些答案在某种程度上有所不同,并且稍微超出了我的水平。SQL不插入重复项
例如下面的帖子是顶部的结果: SQL Server Insert if not exist 但我不明白为什么变量的使用和如何定义Table 1和表2。有人能够进一步解释这个问题吗?这样我就可以将它应用于我的情况了吗?
在我的例子,我有大约5列(日期,数字1,数字,文本1,文本2),我想从表1插入到表2,但前提是不存在的。更新没有必要。 (因此合并是出了问题)
答
甲不存在使用相关子查询应该工作。
子选择标识表1中的所有记录不表2中通过连接在所有我们会被插入的字段存在。这确保我们只插入表2中不存在的记录。
INSERT INTO table2 (Date, Number1, Number2, Text1, Text2)
VALUES
(SELECT A.Date, A.Number1, A.Number2, A.Text1, A.Text2
FROM Table1 A
WHERE NOT EXISTS (SELECT 1
FROM Table2 B
WHERE A.Date = B.Date
AND A.Number1 = B.Number1
AND A.Number2 = B.Number2
AND A.Text1 = B.Text1
AND A.Text2 = B.Text2))
由于我们不关心选择什么样的价值,因为它是从子查询暴殄天物,我只是选择1从不存在相关子查询。
现在,如果有其他列需要考虑,那么我们必须将这些列添加到我们的查询中,或者如果主键可以考虑而不是所有列,那么我们只需要加入它。
答
使用NOT EXISTS
另一种,是使用了EXCEPT
关键字做两个结果集的数据之间的“差异化”,无论从Table1
和Table2
选择:
INSERT INTO table2 (Date, Number1, Number2, Text1, Text2) values
SELECT A.Date, A.Number1, A.Number2, A.Text1, A.Text2
FROM Table1 A
EXCEPT
SELECT B.Date, B.Number1, B.Number2, B.Text1, B.Text2
FROM Table2 B;
我们需要知道您的表结构(两个表)来帮助你。样本数据和您对“重复”的定义也是需要的。 – Siyual