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

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

Barbara Streisand
發布: 2025-01-13 11:59:55
原創
994 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板