SQL Update使用连接表中的值

时间:2014-07-30 11:57:45

标签: sql join sql-update

我尝试使用此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个唯一元素。

这是一个错误,还是预期的结果?

1 个答案:

答案 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应该按照需要运行。