Postgresql
根據包含另一個(連接)表的查詢更新一列
考慮以下選擇查詢:
SELECT s.id, s.event, s.column, e.oldcolumn FROM section as s INNER JOIN event as e ON s.event = e.id WHERE s.id = 1
現在我希望更新節表,使值等於
oldcolumn
事件表中的值。我試過:
UPDATE public."section" SET public."section".column = public."event".oldcolumn FROM public."section" INNER JOIN public."event" on public."section".event = public."event".id WHERE s.id = 1
但是,這在 postgresql 上返回了以下錯誤:
ERROR: table name "section" specified more than once SQL state: 42712
我將如何做這樣的事情,在更新查詢中使用連接?
如手冊中所述,您不應在 FROM 子句中重複目標表。
所以你的更新應該是這樣的:
UPDATE public."section" s SET column = evt.oldcolumn FROM public."event" evt WHERE s.event = evt.id AND s.id = 1;
免責聲明,我不使用 PostgreSQL,但我對 SQL Server 非常熟悉。
根據我在此處的 PostgreSQL 文件中的理解,我認為您遇到的錯誤是由
public."section" INNER JOIN
您的FROM
語句中包含的內容引起的。使用UPDATE
時指定要更新的表,因此public."section"
不需要FROM
添加。根據文件“不要將目標表作為 from_item 重複,除非您打算進行自聯接(在這種情況下,它必須在 from_item 中以別名出現)。”如果您將程式碼更改為我在下面的程式碼,我認為它會解決您的問題。雖然我不確定你的引號,但我只是複制了你的格式。主要區別在於,只有您要加入的表在 中,
FROM
然後將ON
移到WHERE
.UPDATE public."section" SET public."section".column = public."event".oldcolumn FROM public."event" WHERE public."section".event = public."event".id AND public."section".id = 1