我正在尝试使用连接更新一个表。其中一个连接也是自连接。
我需要用同一表中的同一列更新一列。
SERVICE ID code value
123 QUANTITY1 2
123 QUANTITY2 null
字符串
应将数量2更新为“2”。
UPDATE "X"."ORDER_PRODUCT" op
set op."PROPERTY_VALUE"= op2."PROPERTY_VALUE"
from "X"."ORDER_PRODUCT" op2 cross join
"X"."ORDER_PROJECT" op3
where op."SERVICE_ID"= op2."SERVICE_ID" and op."ORDER_ID" =op3."ID"
and op."PRODUCT_CODE" ='Tell_Datacenter_Co-location_Alan' and op2."PROPERTY_CODE" ='Quantity'
and op."PROPERTY_CODE"='Tell_Quantity' and op."PROPERTY_VALUE" is null
and op3."PROJECT_STATUS" not in ('ProjectWF.Cancel','ProjectWF.Complete')
型
错误:SQL错误[42703]:错误:关系“ORDER_PRODUCT”的列“op”不存在位置:48
2条答案
按热度按时间lnxxn5zx1#
我会确保你有一种方法来恢复这个表之前尝试任何建议的更新查询.理想情况下,我们会看到一些样本数据在您的问题,因为我不确定如果下面的建议是有效的.
请仔细考虑我生成的示例数据,请参阅:https://dbfiddle.uk/xgucUoXX和也考虑结果。这将有助于您在运行数据之前优化查询。
假设你可以使用
WITH
,那么最简单的方法是通过一个公共表表达式:字符串
注:与v16一样,
update
命令不直接支持“join”ref.,但允许通过from
子句进行多个表引用,然后通过where
子句施加条件。因此,这可以在不使用WITH
的情况下工作:型
cx6n0qe32#
你得到的错误是你对主表和联接表使用了相同的表别名op。要解决这个问题,你可以对主表和联接表使用不同的表别名。例如,你可以对主表使用op 1,对联接表使用op 2。
字符串
在这个更新的查询中,我为“X”.“ORDER_PRODUCT”表的第二个示例使用了不同的别名,这是自连接正确工作所必需的。查询现在应该按预期更新“X”.“ORDER_PRODUCT”表中的“PROPERTY_VALUE”。