使用 SQL Server 的 INSERT INTO SELECT 避免重复数据
在 SQL Server 中使用 INSERT INTO SELECT
时,如果目标表已包含要插入的数据,则很容易出现重复条目。 为了防止这种情况发生,在插入之前进行有效的过滤至关重要。
让我们用一个例子来说明。我们希望将 Table1
中的数据插入到 Table2
中,但避免重复的 ID:
<code>Table1: ---------- ID Name 1 A 2 B 3 C Table2: ---------- ID Name 1 Z</code>
使用 IF-ELSE
语句是可能的,但会变得笨拙并且需要多个 INSERT INTO
语句。
高效解决方案:NOT EXISTS
、NOT IN
和 LEFT JOIN
更高效的方法利用 NOT EXISTS
、NOT IN
和 LEFT JOIN
在插入之前过滤掉 Table2
中预先存在的数据。
1。使用NOT EXISTS
:
此方法在插入之前检查 Table1
中 Table2
中的每一行是否存在。
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 WHERE NOT EXISTS (SELECT id FROM TABLE_2 t2 WHERE t2.id = t1.id);</code>
2。使用NOT IN
:
与NOT EXISTS
类似,NOT IN
比较ID,仅插入在Table2
中找不到ID的行。
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 WHERE t1.id NOT IN (SELECT id FROM TABLE_2);</code>
3。将 LEFT JOIN
与 IS NULL
一起使用:
LEFT JOIN
标识 Table1
中缺少 Table2
匹配项的行。 IS NULL
过滤这些不匹配的行。
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 LEFT JOIN TABLE_2 t2 ON t2.id = t1.id WHERE t2.id IS NULL;</code>
虽然所有三种方法都达到相同的结果,但 NOT EXISTS
通常提供卓越的性能,尤其是在处理大型数据集时,因此是推荐的方法。
以上是在 SQL Server 中使用 INSERT INTO SELECT 时如何防止重复条目?的详细内容。更多信息请关注PHP中文网其他相关文章!