現在、クエリ可能なテーブルを常に最新の状態に保つために更新ステートメントを作成しています。スキーマは両方のテーブルで同一であり、内容は重要ではありません。
STAGING
ID
NAME
COUNT
PRODUCTION
ID
NAME
COUNT
私の更新ステートメントは次のようになります。
update PRODUCTION
set name = (select stage.name from staging stage where stage.name=name and rownum <2),
count = (select stage.countfrom staging stage where stage.count=count and rownum <2);
注意すべき 2 つの点は、1) 更新の最後に where 句がないこと (これが問題である可能性があります)、および 2) 更新後のすべてのレコードが同じ値を持つことです。これが意味することは次のとおりです。
BEFORE UPDATE:
1,"JOHN", 12;
2,"STEVE",15;
3,"BETTY",2;
AFTER UPDATE
1,"JOHN", 12;
2,"JOHN",12;
3,"JOHN",12;
私の質問は、テーブルがステージングからの「新しい」データを正しい SQL 更新として適切に反映するように、これを修正するにはどうすればよいですか?
アップデート
したがって、私のステージング データは偶然にも内容を反映している可能性がPRODUCTION
あり、議論のために次のようになります。
STAGING DATA TO MERGE:
1,"JOHN", 12;
2,"STEVE",15;
3,"BETTY",2;
2 番目の更新
実行したいクエリは次のとおりです。
update PRODUCTION
set production.name = staging.name,
production.count = staging.count
where production.name = staging.name;
ただし、これにより、「staging.name」で無効な識別子の問題が発生します