2016-08-15 5 views
1

2つのテーブルを結合してSQLで1つのテーブルを取得したい。私の主な問題は、2番目のテーブル(deltaTable)が新しいリビジョンの行で、最初のテーブル(rootTable)と同じIDを持つため、既存の値を上書きすることです。2つのテーブルを結合し、既存の値をSQLで上書きする

例:

1)rootTable

ID | REV | NAME 
1 | 0 | Part 1 
2 | 0 | Part 2 
3 | 0 | Part 3 
4 | 0 | Part 4 
5 | 0 | Part 5 

2)deltaTable

ID | REV | NAME 
2 | 1 | Part 2 
4 | 2 | New Part 4 

私は、次のような結果が欲しい:

ID | REV | NAME 
1 | 0 | Part 1 
2 | 1 | Part 2 
3 | 0 | Part 3 
4 | 2 | New Part 4 
5 | 0 | Part 5 

SQLコードの管理方法を教えてもらえますか?

答えて

1

私が正しくあなたの質問を理解していれば、あなたはUPDATEクエリを使用することができます。

update 
    rootTable r inner join deltaTable d 
    on r.id = d.id 
set 
    r.REV = d.REV, 
    r.NAME = d.NAME 

それはhereを働いてご覧ください。 ホーガンが提案したように、より良いパフォーマンスを提供するのに役立ちますので、where d.rev>r.revのようなものを追加できます。あなたは主キーとしてIDを定義した場合

代替クエリは、次のとおりです。

insert into rootTable (ID, REV, NAME) 
select * from deltaTable 
on duplicate key update 
    REV=values(REV), NAME=values(NAME); 

(これは、既存のレコードを更新し、新しいものを追加します)。

hereをご覧ください。

+2

おそらく、変更されていない行のロックを減らすために、 'どこのr.REV <> d.REVまたはr.NAME <> d.NAME'が必要なのでしょうか? – Hogan

+0

'And'edではないでしょうか? 'WHERE r.REV <> d.REVとr.NAME <> d.NAME' @Hogan – 1000111

+0

@ 1000111もちろん、2つの列のうちの1つが異なる場合は、2つの列を変更する必要があります。 – Hogan

関連する問題