2011-09-08 107 views
1

可能重複:
Insert, on duplicate update (postgresql)
Cannot SELECT from UPDATE RETURNING clause in postgresPostgreSQL的UPSERT查詢

幫助理解我的語法錯誤。我儘量讓這樣的實施UPSERT查詢的 PosgreSql:

create table tbl(key int, val int); 

insert into tbl(key,val) 
    select distinct(key), 0 from unnest('{0,1,2,3,4,5}'::int[]) as key 
     where key not in (
     update tbl set val = 1 
      where key = any('{0,1,2,3,4,5}'::int[]) 
     returning key 
); 

錯誤是:

ERROR: syntax error at or near "tbl" 
ROWS 6: update tbl set val = 1 
       ^

********** Error ********** 

ERROR: syntax error at or near "tbl" 
SQL state: 42601 
Character: 167 

但更新的子查詢,而不嵌件工作做好。

任何最簡單的方法來做upsert查詢?

+1

不,這不是重複 – potapuff

回答

2

你的問題被認爲是重複的,因爲PostgreSQL沒有UPSERT命令的解決方案已經發布,它不會回答你如何實現UPSERT的問題。

在回答你的語法錯誤問題,你正在嘗試做的是不可能的。你會發現,它的變化是可能的PostgreSQL中的9.1即將發佈的版本,這將支持數據修改語句WITH子句: http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING

+0

「在回答你的語法錯誤你試圖做的問題目前不可能。「好。但爲什麼?在文檔中寫爲8.4「可選的RETURNING子句會導致UPDATE根據實際更新的每一行計算並返回值。可以計算任何使用表的列和/或FROM中提及的其他表的列的表達式。使用表的列的新(更新後)值。RETURNING列表的語法與SELECT的輸出列表的語法相同。「但選擇(更新...返回...)拋出語法錯誤 – potapuff

+0

問題是重複http://stackoverflow.com/questions/7191902/cannot-select-from-update-returning-clause-in-postgres – potapuff