正如标题所说,我想知道如何在merge语句中计算和设置变量。如果可能的话。
示例:
MERGE TABLE_1 as target
USING TABLE_2 as source
ON (target.USER_ID = source.USER_ID)
WHEN NOT MATCHED THEN
INSERT (
USER_ID,
CURRENT_CALCULATION,
CURRENT_CALCULATION_VALUE )
VALUES (
source.USER_ID,
SET @CURRENT_CALCULATION = (select value from table3 where table3.USER_ID = source.USER_ID),
... REUSE @CURRENT_CALCULATION for other purposes ...
);
我尝试过不同类型的语法但似乎没有一种方法可行。
答案 0 :(得分:0)
我不相信这是可能的。如果没有更多细节,我无法确定这是否适合您的情况,但如何在MERGE
声明之前简单地执行此逻辑?如果您要避免的是两次击中相同的表,那么您可以在执行所有计算时将所有内容转储到临时表中。
如果你这样做,你可以简单地使用临时表作为合并的源 - 你甚至可能不需要将它放入变量中,因为你可以将它包含在临时表的列中。
答案 1 :(得分:0)
将逻辑移至Merge
的 source 部分并重复使用
MERGE TABLE_1 AS target
USING (SELECT t2.*,
t3.value
FROM TABLE_2 t2
LEFT JOIN table3 t3
ON t3.USER_ID = t2.USER_ID) AS source
ON ( target.USER_ID = source.USER_ID )
WHEN NOT MATCHED THEN
INSERT ( USER_ID,
CURRENT_CALCULATION,
CURRENT_CALCULATION_VALUE )
VALUES ( source.USER_ID,
source.value,
source.value + some logic );
考虑到table 2
和table 3
之间存在 1:1 关系,具体取决于您correlated sub-query
用于查找@CURRENT_CALCULATION