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