gpt4 book ai didi

left-join - 在 netezza 中使用左连接进行更新

转载 作者:行者123 更新时间:2023-12-01 05:05:33 25 4
gpt4 key购买 nike

我需要在更新期间在 netezza 中执行两个表的左连接。我怎样才能做到这一点?与三个表的左连接正在工作,但不能与两个表一起使用。

UPDATE table_1
SET c2 = t2.c2
FROM
table_1 t1
LEFT JOIN table_2.t1
ON t1.c1=t2.c1
LEFT JOIN table_3 t3
ON t2.c1=t3.c1

这有效,但
UPDATE table_1
SET c2 = t2.c2
FROM table_1 t1
LEFT JOIN table_2.t1
ON t1.c1=t2.c1

这就像尝试更新多个列。

谢谢,
马尼拉。

最佳答案

在 Netezza 中使用联接执行 UPDATE TABLE 时,重要的是要了解正在更新的表始终与 FROM 列表隐式 INNER JOINed。这种行为是 documented here .

您的代码实际上是将 table_1 与自身连接起来(一份没有别名,另一份以 t1 作为别名)。由于 table_1 的这两个版本之间没有连接标准,因此您将获得一个交叉连接,它提供了试图更新 table_1 的多行。

使用 OUTER 连接处理 UPDATE 的最佳方法是使用这样的子选择:

TESTDB.ADMIN(ADMIN)=> select * from table_1 order by c1;
C1 | C2
----+----
1 | 1
2 | 2
3 | 3
(3 rows)

TESTDB.ADMIN(ADMIN)=> select * from table_2 order by c1;
C1 | C2
----+----
1 | 10
3 | 30
(2 rows)


TESTDB.ADMIN(ADMIN)=> UPDATE table_1 t1
SET t1.c2 = foo.c2
FROM (
SELECT t1a.c1,
t2.c2
FROM table_1 t1a
LEFT JOIN table_2 t2
ON t1a.c1 = t2.c1
)
foo
WHERE t1.c1 = foo.c1;
UPDATE 3

TESTDB.ADMIN(ADMIN)=> select * from table_1 order by c1;
C1 | C2
----+----
1 | 10
2 |
3 | 30
(3 rows)

关于left-join - 在 netezza 中使用左连接进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com