DB2 中的合并查询

Merge Query in DB2

我需要用非常复杂的计算更新一个 table 中的几列。

我在 SQL 方面不够好,所以我尝试将 "with" 子句与更新结合使用,但它抛出了错误。

然后我在网上找到一个post建议使用MERGE,所以我想出了Merge查询。但是那个也抛出一个错误。

所以我删除了所有其他列并仅更新了一列以消除复杂性,但仍然无济于事

下面是我的查询,select 里面的查询工作得很好。 请提出建议。

MERGE INTO TABLE_1 AS O 
USING (
SELECT  ((TO_NUMBER(TABLE_3.Total_Whsle_Price)-TO_NUMBER(TABLE_2.OPT_BASE_WHSLE)) - ((TO_NUMBER(TABLE_3.Total_Whsle_Price)-TO_NUMBER(TABLE_2.OPT_BASE_WHSLE))*TO_NUMBER(TABLE_1.AUC_MILEAGE))/100000 ) as CORRECT_FLOOR_PRICE
FROM TABLE_1, TABLE_2,TABLE_3
WHERE TABLE_2.Primary_ID= TABLE_1.Primary_ID
AND TABLE_2.option_code = 'FSDS'
AND TABLE_1.FLOOR_PRICE <> '0.00'   
and TABLE_3.Primary_ID=TABLE_1.Primary_ID
and TABLE_3.Primary_ID=TABLE_2.Primary_ID
) AS CORRECT
ON(
 O.Primary_ID = CORRECT.Primary_ID 
)
WHEN MATCHED THEN
UPDATE 
set O.FLOOR_PRICE =CORRECT.CORRECT_FLOOR_PRICE

错误是

An error occurred when executing the SQL command: MERGE INTO ........

DB2 SQL Error: SQLCODE=-199, SQLSTATE=42601, SQLERRMC=SELECT;VALUES, DRIVER=3.61.75 [SQL State=42601, DB Errorcode=-199]

试试这个,我想你忘记了你的 select 语句中的标识符,因为在 "ON" 语句之后 "CORRECT.Primary_ID" 没有关联到任何东西。

MERGE INTO TABLE_1 as O 
USING (
  SELECT  ((TO_NUMBER(TABLE_3.Total_Whsle_Price)-TO_NUMBER
    (TABLE_2.OPT_BASE_WHSLE)) - ((TO_NUMBER(TABLE_3.Total_Whsle_Price)
    -TO_NUMBER(TABLE_2.OPT_BASE_WHSLE))*TO_NUMBER
    (TABLE_1.AUC_MILEAGE))/100000 ) as CORRECT_FLOOR_PRICE,
    TABLE_1.Primary_ID AS Primary_ID 
  FROM 
    TABLE_1, TABLE_2,TABLE_3
    WHERE TABLE_2.Primary_ID = TABLE_1.Primary_ID
    AND TABLE_2.option_code = 'FSDS'
    AND TABLE_1.FLOOR_PRICE <> '0.00'   
    AND TABLE_3.Primary_ID=TABLE_1.Primary_ID
    AND TABLE_3.Primary_ID=TABLE_2.Primary_ID
) AS CORRECT
ON(
 O.Primary_ID = CORRECT.Primary_ID 
)
WHEN MATCHED THEN
UPDATE 
set O.FLOOR_PRICE = CORRECT.CORRECT_FLOOR_PRICE