2011-03-11 118 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