Sql 将表格设置为CTE
我有一个表a,我经常想从另一个表B更新它。 我可以从B创建一个CTE,它看起来与我希望表a的样子完全一样,但是我找不到将a设置为等于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 *,
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中没有的旧记录,这会带来一些麻烦)。