如何在从UPDATE命令维护SET命令的同时将update语句更改为insert语句?

时间:2016-10-04 19:02:23

标签: postgresql amazon-redshift

正如标题所示,我需要将更新和连接语句更改为insert语句。如何在SET语句中加入UPDATE时这样做?

更新声明:

UPDATE tableA
SET    A = tableB.A
FROM   tableB
JOIN   tableC ON tableB.C = tableC.C
WHERE  tableC.D = tableA.D

2 个答案:

答案 0 :(得分:2)

您的表格为空,因此tableC.D = tableA.D无法提供任何内容。

愿你正在寻找这样的东西吗?:

INSERT INTO tableA (A)
SELECT DISTINCT tb.A
FROM tableB tb
JOIN tableC tc ON tb.C = tc.C

或者可能包含D列:

INSERT INTO tableA (A, D)
SELECT DISTINCT tb.A, tc.D
FROM tableB tb
JOIN tableC tc ON tb.C = tc.C

请注意,此处使用DISTINCT来分发重复记录。

答案 1 :(得分:0)

通常,最好在INSERT语句中包含所有列名。您可以通过将tableA连接到tableC来删除WHERE子句。但只是你问题的简单答案是:

INSERT INTO tableA (<col name you want to update>)
VALUES (SELECT <one value> FROM tableB JOIN tableC ON  tableB.C = tableC.C JOIN tableA ON tableC.D = tableA.D
);