PostgreSQL基于同一表更新行

Nor*_*wak 3 sql postgresql

嗨,我将基于同一张表更新行。将“数据”列复制到数据为“”(空)的每一行。这行中的“键”是相同的。

    id |data |key 
   ----|-----|-----
    1  | xyz |key1
   ----|-----|-----
    2  | ""  |key1
Run Code Online (Sandbox Code Playgroud)

我已经尝试过类似的方法,但是“关系a不存在”:

UPDATE a
SET a.data = b.data
FROM table a
  INNER JOIN table b
    ON (a.key = b.key)
WHERE b.data != '""'
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

在 Postgres 中,语法为:

UPDATE a
    SET a.data = b.data
    FROM a b
    WHERE a.key = b.key AND b.data <> '""' AND a.data = '""';
Run Code Online (Sandbox Code Playgroud)

注意:这假设a是表名;b然后是表的别名,“连接”条件位于子句中WHERE


joo*_*oop 5

在Postgres SQL中,您不应在FROM子句中重复目标表的名称(因此不能使用JOIN)


UPDATE table_a dst   -- <<-- target table
SET data = src.data
FROM table_a src     -- <<--- same table, different alias
WHERE dst.key = src.key
AND dst.data = '""'
AND src.data <> '""'
        ;
Run Code Online (Sandbox Code Playgroud)