Sql 将表格设置为CTE

Sql 将表格设置为CTE,sql,postgresql,sql-update,Sql,Postgresql,Sql Update,我有一个表a,我经常想从另一个表B更新它。 我可以从B创建一个CTE,它看起来与我希望表a的样子完全一样,但是我找不到将a设置为等于CTE的语法。我想要的是这样的东西: WITH cte AS ( SELECT *, ARRAY_AGG(column_name), ... FROM B ) UPDATE A SET A = cte FROM cte 您应该提供一些条件和列名称: WITH cte AS ( SELECT *,

我有一个表a,我经常想从另一个表B更新它。 我可以从B创建一个CTE,它看起来与我希望表a的样子完全一样,但是我找不到将a设置为等于CTE的语法。我想要的是这样的东西:

WITH cte AS (
    SELECT *,
        ARRAY_AGG(column_name),
        ...
    FROM B
)
UPDATE A
SET 
    A = cte
FROM cte

您应该提供一些条件和列名称:

WITH cte AS (
    SELECT *,
        ARRAY_AGG(column_name),
        ...
    FROM B
)
UPDATE A
SET 
  --You need to name the columns
    A.column1 = cte.column1,
    A.column2 = cte.column2
FROM cte
  --You need to provide some condition
where A.id=cte.ID
还是要完全替换表A

WITH cte AS (
    SELECT *,
        ARRAY_AGG(column_name),
        ...
    FROM B
)

delete from A
where 1=1

insert into A(column1,column2)
select column1,column2 from cte

关系SQL不能以这种方式工作,即不能将整个表更新为其他表。相反,SQL中的更新操作单个记录。为获得最佳结果,请在问题中添加一些示例数据。请截断或删除并插入,或尝试使用“合并”(尽管如果要删除B中没有的旧记录,这会带来一些麻烦)。