我目前正在寫更新語句,以保持可查詢表不斷最新之間的Oracle SQL更新。該模式是兩個表之間的相同和內容並不重要:基於子查詢兩個表
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);
筆記的兩兩件事是: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更新「新」數據?
UPDATE
所以我臨時數據可能湊巧反映的是在PRODUCTION
和討論的緣故,會:
STAGING DATA TO MERGE:
1,"JOHN", 12;
2,"STEVE",15;
3,"BETTY",2;
更新第二
的查詢我想運行會是這樣:
update PRODUCTION
set production.name = staging.name,
production.count = staging.count
where production.name = staging.name;
然而這會導致無效的問題上「staging.name」
是否要在** PRODUCTION **表中保留** name **和** count **以及** STAGING **表正在更改? – hmmftg 2012-07-27 17:39:56
爲什麼不使用觸發器插入新值而不是此更新?這個更新究竟做了什麼? – hmmftg 2012-07-27 17:42:22
同意,在同步表格時,觸發器對於保持實時更新非常有用。只需要注意表格錯誤的變異,並確保將其作爲AFTER INSERT或UPDATE來執行。 – Hermit 2012-07-27 17:45:36