2016-08-15 89 views
2
屬性

我的查詢如下:返回更新的行上UPDATE

UPDATE t1 SET t1.foreign_key = (SELECT id FROM t2 WHERE t2.col = %s) 
WHERE t1.col = %s 

如何在同一查詢返回更新的行的某些屬性表中?

回答

3

Use the RETURNING clause.

可選RETURNING子句使UPDATE計算並返回根據各行實際更新 值(S)。使用 表格的列和/或FROM中提及的其他表格的列可以計算任何表達式,可以計算出 。使用表格列的新(更新後)值。

但通常情況下這是更聰明的使用連接,而不是相關子查詢:

UPDATE t1 
SET foreign_key = t2.id 
FROM t2 
WHERE t2.col = %s 
AND t1.col = %s 
RETURNING t1.*; -- or only selected columns 

有了您的原始查詢,如果子查詢發現在t2沒有行,t1無論如何更新,t1.col設爲空值。通常情況下,你寧願而不是在這種情況下更新行,這是我建議的查詢代替。

順便說一下,SET子句中的目標列無法進行表格限定(無論如何,只有一個表已更新)。該手冊一次:

不要在目標 柱的規格包括表的名稱 - 例如,UPDATE table_name SET table_name.col = 1是無效的。

+0

謝謝!完全解決了我正在嘗試做的事情 – user113531

2

可以使用RETURNING條款:

UPDATE t1 
    SET t1.foreign_key = (SELECT id FROM t2 WHERE t2.col = %s) 
    WHERE t1.col = %s 
    RETURNING *; 

documentationUPDATE語句的一部分。

相關問題