在 UPDATE 的 WHERE 条件下引用 CTE

Referring to CTE in WHERE condition of UPDATE

我正在尝试 运行 这样的查询:

WITH cte AS
(
  SELECT id, category, SUM(amount) AS sum_amount FROM t1 GROUP BY id, category
)
UPDATE table SET amount = cte.sum_amount WHERE id = cte.id;

但是,我一直收到错误

Unknown column 'cte.id in WHERE clause'

有谁知道如何在 UPDATE 查询中引用我常用的 table 表达式,或者重写它?

你可以试试下面

WITH cte AS
(
  SELECT id, SUM(amount) AS sum_amount FROM t1 GROUP BY category
)
UPDATE T
SET  T.sum_amount= CT.sum_amount
FROM table T
JOIN cte CT
     ON T.id = CT.id

临时 table 的替代方法,您可以阅读 CTE and Temporary Table

临时table:

SELECT id, category, SUM(amount) AS sum_amount 
INTO #temp
FROM t1 GROUP BY id, category

使用临时更新查询 table:

UPDATE OT
SET  OT.sum_amount= TT.sum_amount
FROM table OT
JOIN #temp TT
    ON OT.id = TT.id

CTE:

WITH cte AS
(
  SELECT id, category, SUM(amount) AS sum_amount FROM t1 GROUP BY id,category
)
UPDATE T
SET T.sum_amount= CT.sum_amount
FROM table T
JOIN cte CT
    ON T.id = CT.id