首頁 > 資料庫 > mysql教程 > 如何將行從一個表複製到另一個表,同時防止重複?

如何將行從一個表複製到另一個表,同時防止重複?

Patricia Arquette
發布: 2024-12-28 03:06:09
原創
428 人瀏覽過

How Can I Copy Rows from One Table to Another While Preventing Duplicates?

將行複製到表中同時避免重複

目標是將所有行從一個表(srcTable) 傳輸到另一個表( destTable) ,排除任何重複的條目。雖然添加帶有過濾掉重複項的子查詢的 WHERE 子句似乎很簡單,但這種方法可能會失敗。

子查詢問題:

原始查詢如下:

INSERT INTO destTable
SELECT * FROM srcTable
WHERE NOT EXISTS(SELECT * FROM destTable)
登入後複製

但是,此查詢不會插入任何行,因為子查詢傳回destTable中的所有行,無論是否它們符合srcTable 中的任何行。要使子查詢正常運作,它必須包含一個附加條件來根據相關欄位識別重複行。

修訂後的子查詢:

INSERT INTO destTable
SELECT Field1, Field2, Field3, ...
FROM srcTable
WHERE NOT EXISTS(SELECT *
                 FROM destTable
                 WHERE (srcTable.Field1 = DestTable.Field1 AND
                       srcTable.Field2 = DestTable.Field2 ... etc.))
登入後複製

此修訂後的子查詢比較特定的子查詢用於確定重複項並將其從插入中排除的字段。

外部聯結替代方法:

另一種方法是使用外部連接:

INSERT INTO destTable
SELECT s.field1, s.field2, s.field3,...
FROM srcTable s 
LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...)
WHERE d.Key1 IS NULL
登入後複製

此外連接技術從srcTable 中過濾掉在destTable中具有匹配鍵的行,並在插入期間排除重複項.

尋址源表重複項:

如果擔心sourceTable 包含重複行,則應修改查詢以選擇不同的行:

INSERT INTO destTable
SELECT DISTINCT Field1, Field2, Field3,...
FROM srcTable  
登入後複製

建議在INSERT 語句中包含特定欄位名稱優於使用SELECT *.

以上是如何將行從一個表複製到另一個表,同時防止重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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