这在 Postgres 中有点复杂。不过,我质疑你的逻辑。看起来,一个right outer join
不正确,因为您正在检查第一个表不是NULL
。所以这会seem捕捉你的逻辑:
UPDATE tr
SET (o_t, g_v, br, s_t, st, c_d, n_r, n_a, cd_id)
= (a.o_t, a.g_v, a.br, a.s_t, a.st, a.c_d, a.n_r, a.n_a,
a.cd_id)
FROM tr a JOIN
ht b
USING (date, name, ft );
The where
子句甚至是多余的,因为该值不能是NULL
因为join
健康)状况。无论如何,这不起作用,但它确实指出了正确的解决方案。
在 Postgres 中,该表位于update
不能在FROM
子句,除非您的意图是自连接。所以,试试这个版本:
UPDATE tr
SET (o_t, g_v, br, s_t, st, c_d, n_r, n_a, cd_id)
= (a.o_t, a.g_v, a.br, a.s_t, a.st, a.c_d, a.n_r, a.n_a,
a.cd_id)
FROM tr a JOIN
ht b
USING (date, name, ft )
WHERE tr.date = a.date and tr.name = a.name and tr.ft = a.ft;
然而,这个更新没有意义。我怀疑你希望这些值来自ht
, NOT tr
,当有匹配时。如果是这样,这是最简单的方法:
UPDATE tr
SET (o_t, g_v, br, s_t, st, c_d, n_r, n_a, cd_id)
= (a.o_t, a.g_v, a.br, a.s_t, a.st, a.c_d, a.n_r, a.n_a,
a.cd_id)
FROM ht a
WHERE tr.date = a.date and tr.name = a.name and tr.ft = a.ft;