[英]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.