Я работаю над проектом по объединению данных из исходной таблицы (zsource) в целевую таблицу (ztarget). Таблица назначения показана ниже:
ztarget : -
a,b,n
a1,b1,10
a2,b2,15
Исходная таблица, которую мы получаем, поступает от инструмента, который захватывает триггеры базы данных и отправляет данные в виде дельта записи. В приведенной ниже таблице DI_SEQUENCE_NUMBER - это последовательность, в которой выполняется операция с БД, а DI_OPERATION_TYPE - это тип операции с (D = удалить, U = обновить, I = вставить).
zsource : -
DI_SEQUENCE_NUMBER,DI_OPERATION_TYPE,a,b,n
0,U,a1,b1,15
1,U,a1,b1,16
2,D,a1,b1,33
3,I,a1,b1,43
4,U,a1,b1,55
5,U,a1,b1,65
0,U,a2,b2,99
Как объединить данные из исходной таблицы (zsource) с целевой таблицей (ztarget) в точной последовательности в исходная таблица. Я попробовал приведенный ниже оператор Merge, но он дает мне ошибку "UPDATE / MERGE должен соответствовать не более одной строки источника для каждой целевой строки"
MERGE zsac_figl01.ztarget T
USING (SELECT * FROM `sap01-188316.zsac_figl01.zsource` ORDER BY DI_SEQUENCE_NUMBER) S
ON
T.a = S.a and
T.b = S.b
WHEN MATCHED AND S.DI_OPERATION_TYPE = 'U' THEN
UPDATE SET
T.a = S.a,
T.b = S.b
WHEN MATCHED AND S.DI_OPERATION_TYPE = 'D' THEN
DELETE
WHEN NOT MATCHED BY TARGET THEN
INSERT
(a,b )
VALUES
(a,b )