我尝试使用此sql从已存在的表中的值更新表中的新列。
update "PROMOTION" t1
set "OFFER_CHAIN_ID" = poc."OFFER_CHAIN_ID"
from "PROMOTION_OFFER_CHAIN" poc
inner join "PROMOTION" on "PROMOTION"."ID" = poc."PROMOTION_ID"
发生的事情是连接的第一个值在所有后续条目中被复制。关于两个表。原始表具有唯一值,更新列中的所有值都相同。
最终我使用了这个SQL。
update "PROMOTION" t1
set "OFFER_CHAIN_ID" = poc."OFFER_CHAIN_ID"
from "PROMOTION_OFFER_CHAIN" poc
where
t1."ID" = poc."PROMOTION_ID"
此更新工作并复制所有数据,原始表中的1000个唯一元素,更新表中的1000个唯一元素。
这是一个错误,还是预期的结果?
答案 0 :(得分:1)
SQL表现正常。您的原始查询是:
update "PROMOTION" t1
--------^
set "OFFER_CHAIN_ID" = poc."OFFER_CHAIN_ID"
from "PROMOTION_OFFER_CHAIN" poc inner join
"PROMOTION"
-----------^
on "PROMOTION"."ID" = poc."PROMOTION_ID"
请注意,表PROMOTION
被提及两次。不好。因此,join
发生,产生大量行。然后,该表的t1
版本没有相关性。
您没有提及您正在使用的数据库。在SQL Server中,您只需:
update p
set "OFFER_CHAIN_ID" = poc."OFFER_CHAIN_ID"
from "PROMOTION_OFFER_CHAIN" poc inner join
"PROMOTION" p
on p."ID" = poc."PROMOTION_ID";
请注意别名在update
之后使用(如果没有别名,则使用表名)。现在该表只提到一次,因此update
应该按照需要运行。