2016-12-30 27 views
0

我正在合併兩個有可能產生相同主鍵(id)的表,這將產生重複的條目錯誤。 我有對插入的數據,甚至現有的數據生成新的主鍵OK,所以如果示例數據庫是:在必要時合併表並分配新的主鍵

table_a 
Id | Name 
---------- 
1 | Jack 
---------- 
2 | Jill 
---------- 
3 | John 
---------- 

table_b 
Id | Name 
---------- 
1 | Jim 
---------- 
2 | Jenny 
---------- 
3 | Joy 
---------- 

,進口腳本INSERT INTO table_a SELECT * FROM table_b;

如何拿到劇本當他們被檢測爲重複時分配新的ID?

我知道我可以做INSERT INTO table_a (name) SELECT name FROM table_b,以類似的方式來上Merge and update primary key描述,但我有近100桌,我需要合併,並希望能夠使用SELECT *和分配新的ID不同的結構。

+0

您應該使用ID自動增量和只添加姓名不存在於你的目標表.. – scaisEdge

回答

0

您需要添加指定結果表類型的另一列。 例如在table_a(結果表),你應該添加一個名爲INTtype列(或這裏BIT型的),那麼你需要指定例如0意味着數據table_a1裝置table_b數據。 所以在結果表(table_a)你有以下字段:

  • ID(INT - PK自動增加)
  • 類型(INT)
  • TableRelatedId(INT因爲你已經定義)
  • 名稱( VARCHAR因爲你已經定義)

將記錄您先型更新表「表-A」以前0

UPDATE table_b SET type = 0

,然後按照INSERT合併table_btable_a

INSERT table_a([Type], TableRelatedId, Name) SELECT 1, Id, Name FROM table_b

+0

雖然我是在使用SELECT *的解決方案之後,我現在認爲這是不可能的,這個答案指出了我正確的方向,並且基於此我的工作代碼。 – Fins