繁体   English   中英

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

[英]Updating a table by referencing another table

我有一个表CustPurchase (name, purchase) 和另一个表CustID (id, name)。

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

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

我不断收到语法错误!

我相信您正在使用有用的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 机器上; 但是,根据参考,这似乎是允许的。 问题在于是否将源表包含在 from_list 中。

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

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 无法纠正的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM