首頁 >資料庫 >mysql教程 >在 SQL Server 中使用 INSERT INTO SELECT 時如何防止重複條目?

在 SQL Server 中使用 INSERT INTO SELECT 時如何防止重複條目?

Barbara Streisand
Barbara Streisand原創
2025-01-13 11:59:55992瀏覽

How Can I Prevent Duplicate Entries When Using INSERT INTO SELECT in SQL Server?

使用 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 EXISTSNOT INLEFT JOIN

更有效率的方法利用 NOT EXISTSNOT INLEFT JOIN 在插入之前過濾掉 Table2 中預先存在的資料。

1。使用NOT EXISTS

此方法在插入之前檢查 Table1Table2 中的每一行是否存在。

<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 JOINIS 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn