2016-12-30 2 views
0

重複エントリエラーを生成する同じ主キー(ID)を持つ可能性のある2つのテーブルをマージしています。 例のデータベースがあるので、もし私が、挿入されたデータ、あるいは既存のデータのために生成された新しい主キーを持つ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を割り当てる

は私がMerge and update primary keyに説明したのと同様の方法で、INSERT INTO table_a (name) SELECT name FROM table_bを行うことができます実現が、私はマージする必要があるとSELECT *を使用して、新しいIDを割り当てることができることを好むだろう異なる構造のほぼ100のテーブルを持っています。

+0

.. – scaisEdge

答えて

0

結果表のタイプを指定する別の列を追加する必要があります。 table_a(結果表)でたとえば あなたはINTタイプ(または、ここBITタイプの)のtypeという名前の列を追加する必要があり、その後は一例0のために指定する必要がtable_a1のデータはtable_bのためのデータを意味を意味します。 だから、結果テーブル(table_a)に次したフィールド:

  • ID(INT - PK自動インクリメント)
  • タイプ(INT)(すでに定義されてINTとして)
  • TableRelatedId
  • 名(すでに定義されているようVARCHAR)

レコードを挿入する前に、あなたが最初のタイプ0

によりテーブル「table_a」を更新

UPDATE table_b SET type = 0

、その後INSERTに従うことによってtable_atable_bをマージ:私はあなたが先テーブルに名前のみ存在していないIDの自動インクリメントやアドオンを使用する必要があります

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

+0

あったがSELECT *を使用した解決策の後で、私はこれが不可能だと思っています。この答えは正しい方向で私に指摘し、私はこれに基づいて作業コードを作成しました。 – Fins

関連する問題