我真的需要这样做:
UPDATE table t1
SET column1=t2.column1
FROM table t2
INNER JOIN table t3
USING (column2)
GROUP BY t1.column2;
但是postgres说我对GROUP BY子句有语法错误。有什么不同的方法可以做到这一点?
发布于 2011-03-11 19:49:42
UPDATE语句不支持GROUP BY,请参见the documentation。如果您尝试使用t2中的相应行更新t1,您可能希望使用WHERE子句,如下所示:
UPDATE table t1 SET column1=t2.column1
FROM table t2
JOIN table t3 USING (column2)
WHERE t1.column2=t2.column2;
如果您需要在将t2/t3中的行分配给t1之前对其进行分组,则需要使用如下所示的子查询:
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.column 1没有包含在GROUP BY语句中(它必须是一个聚合函数,而不是一个简单的列引用)。
否则,你到底想在这里做什么?
发布于 2022-02-15 09:18:31
在MariaDB/ MySQL中,这个SQL是工作的:
UPDATE table t1 left join (
SELECT t2.column1, column2
FROM table t2
JOIN table t3 USING (column2)
GROUP BY column2
) AS sq on t1.column2=sq.column2
SET column1=sq.column1;
https://stackoverflow.com/questions/5272412
复制相似问题