【问题标题】:GROUP BY in UPDATE FROM clauseUPDATE FROM 子句中的 GROUP BY
【发布时间】:2011-07-13 10:41:49
【问题描述】:

我真的需要这样做:

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

但是 postgres 说我有关于 GROUP BY 子句的语法错误。有什么不同的方法可以做到这一点?

【问题讨论】:

  • 我认为您需要更清楚地证明您想要什么:当您按“t1.column2”分组时引用“t2.column1”在普通查询中也没有意义。您也没有指定连接 t2 和 t1 的任何条件,这实际上没有意义。
  • 我认为至少用mysql做不到

标签: postgresql group-by


【解决方案1】:

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;

如果您需要在分配给 t1 之前对 t2/t3 中的行进行分组,则需要使用类似这样的子查询:

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 语句中(它必须是聚合函数,而不是简单的列引用)。

否则,你到底想在这里做什么?

【讨论】:

  • 我也不明白他想做什么,但这个回复对我还是很有帮助的=)
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 2018-03-23
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多