2011-03-11 160 views
17

我真的需要做這樣的事情:GROUP BY在UPDATE FROM子句

UPDATE table t1 
SET column1=t2.column1 
FROM table t2 
INNER JOIN table t3 
USING (column2) 
GROUP BY t1.column2; 

但Postgres的是說,我有語法錯誤有關GROUP BY子句。什麼是不同的方式來做到這一點?

+0

我認爲你需要更清楚地表明你想要什麼:當你用「t1.column2」進行分組時,引用「t2.column1」在簡單的查詢中也是沒有意義的。你也沒有指定加入t2和t1的任何條件,這沒有任何意義。 – araqnid

+0

我不認爲用mysql至少可以完成 – shigeta

回答

47

UPDATE語句不支持GROUP BY,請參閱the documentation。如果你想更新與T2相應的行T1,你想使用WHERE子句是這樣的:如果分配給t1之前需要一羣來自T2/T3行

UPDATE table t1 SET column1=t2.column1 
FROM table t2 
JOIN table t3 USING (column2) 
WHERE t1.column2=t2.column2; 

,你需要使用子查詢是這樣的:

UPDATE table t1 SET column1=sq.column1 
FROM (
    SELECT t2.column1, column2 
    FROM table t2 
    JOIN table t3 USING (column2) 
    GROUP BY column2 
    ) AS sq 
WHERE t1.column2=sq.column2; 

雖然作爲制定,將無法工作,因爲t2.column1沒有在GROUP BY語句包括(但必須是一個聚合函數而不是簡單的列參考)。

否則,你到底在做什麼?

+1

我不明白他在做什麼,但是這個響應對我來說還是很有幫助=) – Yobert