Join

SQL 更新列與另一個表列

  • July 7, 2016

我正在使用 Postgres 9.4,並且已經看到其他人提出相同(簡單)的問題,但他們的答案並沒有解決我的問題,我不明白為什麼。假設我有這些帶有公共數據的表 A 以及這些數據對應的類型,因此還有一個指標(我想在另一個表 B 中添加它):

gid, type,  indicator
   1       a      ''
   2       b      ''
   3       e      ''
   4       a      ''
   5       d      ''

還有這個表B,它描述了類型及其各自的指標

type, indicator
   a       alfa
   b       alfa
   c       beta
   d       beta
   e       gama

我正在執行此查詢,但indicator為每一行獲取 =alfa。

UPDATE A
SET    indicator = B.indicator
FROM   B
JOIN   A aa ON B.type = aa.type 

我正在尋找 A 的結果是這樣的:

gid, type,  indicator
   1       a      alfa
   2       b      alfa
   3       e      gama
   4       a      alfa
   5       d      beta

希望這很清楚

Update Syntax for PostgreSQL是不同的:

[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
   SET { column_name = { expression | DEFAULT } |
         ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) |
         ( column_name [, ...] ) = ( sub-SELECT )
       } [, ...]
   [ FROM from_list ]
   [ WHERE condition | WHERE CURRENT OF cursor_name ]
   [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

在您的情況下,請嘗試以下查詢:

UPDATE TableA AS A
SET indicator = B.indicator 
FROM TableB AS B
WHERE B.type = A.type

結果:

gid     type    indicator
--------------------------
1       a       alfa
2       b       alfa
3       e       gama
4       a       alfa
5       d       beta

SQLFiddle工作展示

引用自:https://dba.stackexchange.com/questions/143185