通过引用另一个表来更新表

时间:2011-07-18 02:12:22

标签: sql postgresql

我有一个表CustPurchase(名称,购买)和另一个表CustID(id,name)。

我将CustPurchase表更改为id字段。现在,我想通过引用CustID表中的客户ID来填充这个新创建的字段,使用:

UPDATE CustPurchase
   SET CustPurchase.id = CustID.id 
 WHERE CustPurchase.name = CustID.name;

我不断收到语法错误!

2 个答案:

答案 0 :(得分:14)

我相信您使用的是有用的UPDATE FROM语法。

UPDATE CustPurchase SET id = CI.id 
FROM
   CustPurchase CP
   inner join CustID CI on (CI.name = CP.name)

这可能必须如下:

UPDATE CustPurchase SET id = CI.id 
FROM
   CustID CI 
WHERE
   CI.name = CustPurchase.name

抱歉,我离开了Postgres机器;但是,based upon the reference,看起来这是允许的。麻烦在于是否在from_list中包含源表。

答案 1 :(得分:4)

按名称加入并不是一个理想的选择,但这应该有效:

UPDATE custpurchase
   SET id = (SELECT c.id
               FROM CUSTID c
              WHERE c.name = custpurchase.name)

需要注意的是,如果没有匹配项,则尝试插入的值为NULL。假设id列不允许NULL但允许重复值:

UPDATE custpurchase
   SET id = (SELECT COALESCE(c.id, -99)
               FROM CUSTID c
              WHERE c.name = custpurchase.name)

COALESCE将返回第一个非NULL值。使这个值超出您通常所期望的值将使得更容易隔离这些记录和妥善处理。

否则,您必须在名称的基础上“手动”更新,以更正SQL无法实现的实例。