FOR v2 AS
c2 CURSOR FOR
SELECT he.MyPrimary, he.SomeCode, he.SomeName, pe.MyPrimary
FROM SomeTable he
INNER JOIN AnotherTable pe
ON (he.ColOne = pe.FooOne
AND he.ColTwo = pe.ColTwo
AND he.ColThree = pe.FooOne
AND he.SomeCode = pe.SomeCode)
WHERE he.relevancy = 1 AND he.ColThree = '2011-01-05' AND he.ColFive = 9
DO
UPDATE AnotherTable SET match = he.MyPrimary, FooTwo = he.SomeCode, SomeName = he.SomeName WHERE MyPrimary = pe.MyPrimary;
END FOR;
У меня есть код выше, и я пытаюсь сделать это без использования курсоров, но я не уверен, как сделать оператор UPDATE
с INNER JOIN
.По сути, я хотел бы объединить две таблицы SomeTable
и AnotherTable
, затем, основываясь на значениях некоторых столбцов из SomeTable
, скопировать значение в аналогичный столбец в AnotherTable
.Я использую DB2.
РЕДАКТИРОВАТЬ: Я просто смотрел на это: INNER JOIN в UPDATE sql для DB2
Будет ли это иметь смыслвместо этого сделать что-то вроде этого:
UPDATE
SomeTable pe
SET
match = (SELECT he.MyPrimary FROM SomeTable he WHERE he.ColOne = pe.FooOne
AND he.ColTwo = pe.ColTwo
AND he.ColThree = pe.FooOne
AND he.SomeCode = pe.SomeCode ),
FooTwo = (SELECT he.SomeCode FROM SomeTable he WHERE he.ColOne = pe.FooOne
AND he.ColTwo = pe.ColTwo
AND he.ColThree = pe.FooOne
AND he.SomeCode = pe.SomeCode )
WHERE
he.relevancy = 1 AND he.ColThree = '2011-01-05' AND he.ColFive = 9