SQL Server:在 INSERT INTO SELECT
將資料從 SQL Server 中的一個資料表插入另一個表中需要仔細考慮以避免重複條目。 當目標表已包含潛在衝突的資料時,這一點至關重要。考慮這個例子:
<code>Table1 ---------- ID Name 1 A 2 B 3 C Table2 ---------- ID Name 1 Z</code>
簡單的 INSERT INTO SELECT
會因重複的 ID
而失敗 (1)。 雖然條件 IF-ELSE
語句是可能的,但它們效率低且麻煩。 存在更有效的替代方案:
方法一:使用NOT EXISTS
這通常是最有效的方法:
<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>
僅插入 Table1
中 ID
尚未存在於 Table2
中的行。
方法二:使用NOT IN
此方法在選擇過程中過濾重複項:
<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>
這種方法的效率低於NOT EXISTS
,特別是對於大型資料集。
方法三:使用LEFT JOIN
和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>
A LEFT JOIN
標識不符的行; 僅插入 NULL
中具有 Table2.id
值的內容。
為了獲得最佳效能,特別是對於大型資料集,建議使用NOT EXISTS
方法。 避免使用 LEFT JOIN
方法,除非其他因素使其更可取。 選擇最適合您的特定需求和資料集大小的方法。
以上是使用SQL Server的INSERT INTO SELECT插入資料時如何有效率地避免重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!