Postgresql
來自子查詢的 UPDATE 更新不應更新的行
使用 PostgreSQL,我想更新一列。如何更新的資訊在另一個表中。
我的嘗試是這樣,但它也會更新我不想更新的行:
update table_1 set column_x = ( select table_2.rename from table_2 where table_2.rename IS NOT NULL and table_1.id = table_2.id)
如何修改查詢?
也許這有助於解釋我的問題:http ://www.sqlfiddle.com/#!15/318fb/1
使用
FROM
子句加入更多表:UPDATE table_1 t1 -- alias optional SET column_x = t2.rename FROM table_2 t2 WHERE t2.rename IS NOT NULL -- assuming you actually meant t1 AND t2.id = t1.id;
這將
table_2
a - 中的行連接到由使其有效CROSS JOIN
的條件過濾。t2.id = t1.id``INNER JOIN
這樣,在另一個表中沒有匹配的行根本不會被觸及 - 不像您的帶有相關子查詢的查詢。
帶有擴展展示的SQL Fiddle 。
您還必須了解 NULL、空字元串和“無行”(在相關子查詢中導致 NULL)之間的區別。