使用另一个表列中的值更新表列

时间:2018-01-25 08:57:49

标签: sql postgresql

我有两张看起来像这样的表

TABLE_1
option_id PK,
condition_id FK,

我有另一张看起来像这样的表

TABLE_2
option_id PK, FK -> TABLE_1
condition_id PK, FK

我想在TABLE_1中设置condition_id,其中包含来自TABLE_2的condition_id的相应值。

我的脚本看起来像这样

UPDATE TABLE_1
SET 
    condition_id = t2.condition_id
FROM TABLE_1 t1
INNER JOIN TABLE_2 t2
ON t1.option_id = t2.option_id

但似乎错了 - 执行后condition_idTABLE_1的所有值都相同。

有什么问题?

2 个答案:

答案 0 :(得分:1)

问题是:您使用的是TABLE_1的两个实例。

UPDATE TABLE_1   <-- first instance

FROM TABLE_1 t1 <-- second instance

因此,虽然FROM允许您引用与匹配条目相关的组合结构,但这与正在更新的TABLE_1实例形成完全交叉连接。为避免这种情况,您需要添加其他条件,例如WHERE TU.option_id=t1.option_id。 (我将TU作为更新目标表的别名,以避免歧义。)

或者,您可能只是使用:

UPDATE TABLE_1 t1
SET 
    condition_id = t2.condition_id
FROM TABLE_2 t2
WHEREt1.option_id = t2.option_id

答案 1 :(得分:0)

这样的事情应该这样做:

UPDATE table1 
   SET table1.condition_id= table2.condition_id
   FROM table1  INNER JOIN  table2 ON table1.option_id = table2.option_id