[英]SQL: Copy missing rows from one table to another based on primary key column only
我試圖將丟失的行從一個表復制到另一個表,但僅限於主鍵字段不存在時。 兩個表都具有相同的列名,但我沒有列數及其名稱,並且沒有主鍵列名稱,因此它可能是“ID”或其他任何內容。 讓我用一個例子來解釋一下:
表格1:
column 1 (primary key) , Column 2 , Column 3 , ...
1 , England , London , ...
2 , France , Paris , ...
3, Italy , Rome , ...
4 , Germany , Berlin , ...
表2:
column 1 (primary key) , Column 2 , Column 3 , ...
1 , Whatever , Whatever , ...
2 , Whatever , Whatever , ...
我想將第3行和第4行復制到表2中,結果將是:
表2:
column 1 (primary key) , Column 2 , Column 3 , ...
1 , Whatever , Whatever , ...
2 , Whatever , Whatever , ...
3 , Italy , Rome , ...
4 , Germany , Berlin , ...
我努力了
REPLACE INTO table1 SELECT * FROM table2;
但這將取代整個表格,即表2與表1完全相同
你可以使用insert . . . select
insert . . . select
insert . . . select
:
insert into table2 ( col1, col2 . . . )
select t1.col1, t1.col2, t1.col3, . . .
from table1 t1
where not exists (select 1 from table2 t2 where t2.id = t1.id)
如果您只想忽略table1
包含table2
現有主鍵的行,那么最簡單的方法是使用INSERT IGNORE
語法:
INSERT IGNORE INTO table2 SELECT * FROM table1;
請注意,如果任何UNIQUE KEY(不僅是PRIMARY)中存在重復,則忽略行而不插入行。
文檔: INSERT語法
如果使用
IGNORE
修飾符,則會忽略執行INSERT
語句時發生的錯誤。 例如,如果沒有IGNORE
,則復制表中現有UNIQUE
索引或PRIMARY KEY
值的行會導致重復鍵錯誤,並且語句將中止。 使用IGNORE
,該行將被丟棄並且不會發生錯誤。 忽略的錯誤會生成警告。
另請注意,兩個表中的列應按相同順序定義。 實際上,表應該具有完全相同的模式(具有相同數據類型,長度,字符集和排序規則的相同列)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.