(Edit: В случае, если кто хотел бы попробовать, это URL 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
, я бы хотел бы посмотреть его в таблице A
с использованием col_1
и col_2
И если cnt_1
таблицы A
меньше, чем у стола B
, то я хотел бы обновить cnt_1
и mapped_val
записей в таблице A
с тем из таблицы 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);
Заранее благодарим за ваши ответы/предложения!
Благодарим вас за ответ. Я пробовал это, и это очень близко к тому, чего я хотел бы достичь. Единственным исключением является то, что 'A2 \t B2 строка do_not_update_this' в таблице' B' добавлена в 'A' в результате. Я обновил свой вопрос с помощью ссылки на скрипт SQL в случае, если кто-то захочет нанести ему удар. Еще раз спасибо. – user1330974
Ну, тогда я предполагаю, что ваш исходный запрос с 'WHEN MATCHED AND a.cnt1
Я пробовал только ради этого, но я не думаю, что 'WHEN MATCHED AND a.cnt1
user1330974