您能帮我解决这个问题吗?必须进行更新,但错误
出现在Oracle中。我需要用NEW
Select Results:
PRODUCT OLD NEW
12345837 1 0
15198683 2 1
查询更新:
UPDATE
(SELECT
T2.PRODUCT,
T1.RESERVED_AMT AS OLD,
T1.RESERVED_AMT-T2.RESERVED AS NEW
FROM PRODUCT_LOCATION T1
INNER JOIN Temp_Reservado_Control2 T2
ON T1.LOCATION_ID=T2.LOCATIONE AND T1.PRODUCT_ID=T2.PRODUCT AND T1.RESERVED_AMT > 0) t
SET t.OLD = t.NEW
SQL错误[1779] [42000]:ORA-01779:无法修改映射的列 到非保留键的表
非常感谢您的帮助和建议。 问候。
答案 0 :(得分:0)
您可以使用UPDATE
进行更新,并可以在SET
和EXISTS
子句中重复子查询。
此外,您可以使用MERGE
。
-使用更新并存在
UPDATE PRODUCT_LOCATION T1
SET T1.RESERVED_AMT = T1.RESERVED_AMT -
(SELECT T2.RESERVED
FROM Temp_Reservado_Control2 T2
WHERE T1.LOCATION_ID=T2.LOCATIONE AND T1.PRODUCT_ID=T2.PRODUCT AND T1.RESERVED_AMT > 0)
WHERE
EXISTS
(SELECT 1
FROM Temp_Reservado_Control2 T12
ON T1.LOCATION_ID=T12.LOCATIONE AND T1.PRODUCT_ID=T12.PRODUCT AND T1.RESERVED_AMT > 0);
-使用MERGE
MERGE INTO PRODUCT_LOCATION T1
USING (SELECT T2.RESERVED, T2.LOCATIONE, T2.PRODUCT
FROM Temp_Reservado_Control2 T2) T2
ON ( T1.LOCATION_ID=T2.LOCATIONE AND T1.PRODUCT_ID=T2.PRODUCT)
WHEN MATCHED THEN
UPDATE SET T1.RESERVED_AMT = T1.RESERVED_AMT - T2.RESERVED
WHERE T1.RESERVED_AMT > 0;
注意:如果Temp_Reservado_Control2
中有多个匹配记录,则需要在RESERVED
列上使用聚合函数。
干杯!