簡體   English   中英

SQL:僅基於主鍵列將缺失的行從一個表復制到另一個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM