Postgresql使用update語句的方法示例
解決問題
通過多張關(guān)聯(lián)表更新主表的字段,根據(jù)狀態(tài)更新為不同的值。
一、關(guān)聯(lián)表更新
1.關(guān)聯(lián)一張表
更新 table1 表中 num 字段的值為 table2 表中的 sum 的值
update table1 a set a.num = b.sum from table2 b where a.id = b.rel_id and b.type = '1';
2.關(guān)聯(lián)多張表
更新 table1 表中 num 字段的值為 table2 和 table3 表中的 sum 字段的和
update table1 a set a.num = b.sum + c.sum from table2 b left join table3 c on b.id = c.rel_id where a.id = b.rel_id and c.type = '1';
update table1 a set a.num = b.sum + c.sum from table2 b, table3 c where a.id = b.rel_id and b.id = c.rel_id and c.type = '1';
二、根據(jù)狀態(tài)更新為不同的值
根據(jù) table2 表中的 type 的值,更新 table1 表中 num 字段的值
update table1 a set a.num = case when b.type = '1' then b.sum else b.sum + 1 end from table2 b where a.id = b.rel_id;
根據(jù) table3 表中的 type 的值,更新 table1 表中 num 字段的值為 table2 表中的值
update table1 a set a.num = case when c.type = '1' then b.interest_sum else b.interest_sum + 1 end from ( select sum(interest) as interest_sum from table2 group by country ) b left join table3 c on b.rel_id = c.id where a.rel_id = b.id and a.type = '1';
附:update對分區(qū)表使用的影響
在查詢這個一對多進行update執(zhí)行的時候,官網(wǎng)還對其分區(qū)表的分區(qū)鍵進行update后,會不會變更其分區(qū)進行了解讀:
在分區(qū)表的情況下,更新一行有可能導致它不再滿足其所在分區(qū)的分區(qū)約束。此時,如果這個行滿足分區(qū)樹中某個其他分區(qū)的分區(qū)約束,那么這個行會被移動到那個分區(qū)。 如果沒有這樣的分區(qū),則會發(fā)生錯誤。在后臺,行的移動實際上是一次DELETE操作和一次INSERT操作。
在移動的行上的并發(fā)UPDATE或DELETE可能會收到序列化失敗錯誤。 假設(shè)會話 1 正在分區(qū)鍵上執(zhí)行UPDATE,同時,對可訪問該行的并發(fā)會話 2 在此行上執(zhí)行UPDATE或DELETE操作。 在這種情況下,會話 2 的UPDATE 或 DELETE將檢測行移動并引發(fā)序列化失敗錯誤(該錯誤始終返回 SQLSTATE 代碼"40001")。 如果發(fā)生這種情況,應(yīng)用程序可能希望重試事務(wù)。 在通常情況下,表沒有分區(qū)或沒有行移動,會話 2 將標識新更新的行,并執(zhí)行UPDATE/DELETE在此新行版本中。
請注意,雖然行可以從本地分區(qū)移動到外表分區(qū)(如果外數(shù)據(jù)包裝器支持元組路由),但它們不能從外表分區(qū)移動到另一個分區(qū)。
總結(jié)
到此這篇關(guān)于Postgresql使用update語句的文章就介紹到這了,更多相關(guān)Postgresql使用update內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- PostgreSQL實時查看數(shù)據(jù)庫實例正在執(zhí)行的SQL語句實例詳解
- Postgresql 查看SQL語句執(zhí)行效率的操作
- postgresql SQL語句變量的使用說明
- Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個事務(wù)
- postgresql 賦權(quán)語句 grant的正確使用說明
- PostgreSQL標準建表語句分享
- postgresql 導出建表語句的命令操作
- postgresql 實現(xiàn)sql多行語句合并一行
- Postgresql ALTER語句常用操作小結(jié)
- Postgresql開啟SQL執(zhí)行語句收集過程
相關(guān)文章
如何在Neo4j與PostgreSQL間實現(xiàn)高效數(shù)據(jù)同步
本文詳細介紹了如何在Neo4j與PostgreSQL兩種數(shù)據(jù)庫之間實現(xiàn)高效數(shù)據(jù)同步,從基礎(chǔ)概念到全量與增量同步的實現(xiàn)策略,結(jié)合具體代碼與實踐案例,為開發(fā)者提供了全面的指導,感興趣的朋友跟隨小編一起看看吧2024-12-12SpringBoot連接使用PostgreSql數(shù)據(jù)庫的方法
這篇文章主要介紹了SpringBoot連接使用PostgreSql數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01PostgreSQL 實現(xiàn)將多行合并轉(zhuǎn)為列
這篇文章主要介紹了PostgreSQL 實現(xiàn)將多行合并轉(zhuǎn)為列的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12PostgreSQL中ON?CONFLICT的使用及一些擴展用法
Postgres?ON?CONFLICT是PostgreSQL數(shù)據(jù)庫中的一個功能,用于處理插入或更新數(shù)據(jù)時的沖突情況,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL中ON?CONFLICT的使用及一些擴展用法的相關(guān)資料,需要的朋友可以參考下2024-06-06PostgreSQL實戰(zhàn)之啟動恢復(fù)讀取checkpoint記錄失敗的條件詳解
這篇文章主要給大家介紹了關(guān)于PostgreSQL實戰(zhàn)之啟動恢復(fù)讀取checkpoint記錄失敗的條件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-08-08