我的查詢如下:返回更新的行上UPDATE
UPDATE t1 SET t1.foreign_key = (SELECT id FROM t2 WHERE t2.col = %s)
WHERE t1.col = %s
如何在同一查詢返回更新的行的某些屬性表中?
我的查詢如下:返回更新的行上UPDATE
UPDATE t1 SET t1.foreign_key = (SELECT id FROM t2 WHERE t2.col = %s)
WHERE t1.col = %s
如何在同一查詢返回更新的行的某些屬性表中?
可選
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
是無效的。
可以使用RETURNING
條款:
UPDATE t1
SET t1.foreign_key = (SELECT id FROM t2 WHERE t2.col = %s)
WHERE t1.col = %s
RETURNING *;
的documentation是UPDATE
語句的一部分。
謝謝!完全解決了我正在嘗試做的事情 – user113531