0
(編輯:如果有人想嘗試,這是SQL小提琴網址:http://sqlfiddle.com/#!9/39c72c/1)如何更新(合併)當表中存在類似的項目
假設我有表A
看起來象下面這樣:
col_1 col_2 cnt_1 mapped_val
A1 B1 10 mapped_A1
A2 B2 5 mapped_A2
A3 B3 0 mapped_A3
....
我也有表B
看起來象下面這樣:
col_1 col_2 cnt_1 mapped_val
A1 B1 20 update_to_this
A2 B2 5 do_not_update_to_this
D1 D2 5 mapped_D1
E3 E3 0 mapped_E3
....
對於每一行的表B
,我喜歡看它在使用col_1
和col_2
表A
,如果表A
的cnt_1
比表B
小,那麼我想更新表A
cnt_1
和mapped_val
項與該表B
的。對於不匹配的表B
中的那些,我想將它們附加到表A
。通過採用這樣的操作表A
的結果將是:
col_1 col_2 cnt_1 mapped_val
A1 B1 20 update_to_this
A2 B2 5 mapped_A2
A3 B3 0 mapped_A3
D1 D2 5 mapped_D1
E3 E3 0 mapped_E3
....
我覺得MERGE INTO
(請參閱我的最好的嘗試下同)接近完成這一點,但我不知道如何實現比較邏輯的一部分MERGE INTO
查詢。
MERGE INTO
A AS a
USING
B AS b
ON
a.col_1 = b.col_1
AND
a.col_2 = b.col_2
WHEN MATCHED -- AND a.cnt_1 < b.cnt_1?
THEN UPDATE
SET
a.cnt_1 = b.cnt_1,
a.mapped_val = b.mapped_val
WHEN NOT MATCHED -- AND a.cnt_1 < b.cnt_1?
THEN INSERT
(col_1, col_2, cnt_1, mapped_val)
VALUES
(b.col_1, b.col_2, b.cnt_1, b.mapped_val);
非常感謝您的回答/建議!
謝謝你的回答。我試過了,它非常接近我想達到的目標。唯一的例外是,表'B'中的do_not_update_this'行因此被添加到'A'中。我用SQL小提琴鏈接更新了我的問題,以防有人想要刺戳它。再次感謝你。 – user1330974
那麼,我猜你的原始查詢與'WHEN MATCHED AND a.cnt1
我只是爲了它而試過,但我不認爲'WHEN MATCHED和a.cnt1
user1330974