sql查詢更新update select

安全劍客發表於2020-12-27
針對一個上線的專案進行資料庫最佳化,以便後期統計,遇到一個資料填充的問題,在此記錄一下,各位如果也有這種問題,歡迎一起交流。

表結構:

sql查詢更新update selectsql查詢更新update select

當我從其它資料來源使用sql來填充這個表資料時,from_id都是null,因此要使用update來對from_id進行補充。

update t_ch_test t set t.from_id =
(select max(a.id) from t_ch_test a where a.node_id = t.node_id and a.id < t.id)

使用update select來自連線進行更新操作。這個sql在oracle中執行是沒有任何問題的,然後,坑爹的是,這個sql在postgresql中編譯都報錯。而我們專案組用的最多的就是postgresql,因此無語了。

後來百度一下,發現postgresql在update時不支援表別名alis,所以最開始想的是把別名去掉,如下:

update t_ch_test set from_id =
(select max(a.id) from t_ch_test a where a.node_id = node_id and a.id < id)

sql執行是沒有問題了,但一查結果,發現from_id全部為null,怎麼回事兒呢。

後來在同事的指導下,a.id < id換成了a.id < 100,執行成功,from_id也有值了,但這個100不能是一個固定值呀。後來自己各種試,終於試出來了,不用表別名,直接用表名代替,如下:

update t_ch_test set from_id =
(select max(a.id) from t_ch_test a where a.node_id = t_ch_test.node_id and a.id < t_ch_test.id)

終於成功了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2745753/,如需轉載,請註明出處,否則將追究法律責任。

相關文章