我有一个表CustPurchase
(名称,购买)和另一个表CustID
(id,name)。
我将CustPurchase
表更改为id
字段。现在,我想通过引用CustID
表中的客户ID来填充这个新创建的字段,使用:
UPDATE CustPurchase
SET CustPurchase.id = CustID.id
WHERE CustPurchase.name = CustID.name;
我不断收到语法错误!
答案 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无法实现的实例。