根据其他表中的列更新表列

时间:2014-05-22 13:07:38

标签: sql postgresql sql-update

我有dim_table列:

item_key, client_id, date, notes, old_key 

fact_table

user_key, trans_key, item_key, ref_number,date

我必须更新fact_tableitem_keydim_table.item_key不等。{
dim_table.old_key等于fact_table.item_key中的现有密钥。

我尝试了这个,但它不起作用:

update fact_table
SET fact_table.item_key = dim_table.item_key
where
fact_table.item_key = dim_table.old_key
and fact_table.item_key <> dim_table.item_key
  

错误:缺少表“dim_table”

的FROM子句条目

2 个答案:

答案 0 :(得分:2)

您缺少更新声明的部分内容:

update fact_table
SET item_key = dim_table.item_key
FROM dim_table
where
fact_table.item_key = dim_table.old_key
and fact_table.item_key <> dim_table.item_key

答案 1 :(得分:1)

  • 缺少FROM项目(由@Brandon发布)。
  • SET子句表中的列限定,无效(由@Rohit评论)。
  • 逻辑与描述相矛盾:<>=已切换为WHERE条款。

我还简化了表别名:

UPDATE fact_table f
SET    item_key = d.item_key
FROM  dim_table d
WHERE  f.item_key <> d.old_key
AND    f.item_key = d.item_key;

Per documentation:

  

不要在目标规范中包含表格的名称   列 - 例如,UPDATE tab SET tab.col = 1无效。