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