簡體   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