首页 > 解决方案 > RedShift 表行在使用另一个表更新后重复

问题描述

主表:

CREATE TABLE ca_ger.cln_trans_base (
  store_code VARCHAR(25),
  year_week varchar(25),
  division VARCHAR(25) encode lzo,
  market_share_code VARCHAR(25) encode bytedict,
  pon   VARCHAR(25) encode lzo,
  osp_price REAL encode bytedict
)
diststyle key distkey(store_code)
sortkey(store_code,year_week); 

COMMIT;

第二张表:

CREATE TABLE ca_ger.divisions(
  store_code VARCHAR(25),
  year_week varchar(25),
  division VARCHAR(25) encode lzo
)
diststyle key distkey(store_code)
sortkey(store_code,year_week); 

COMMIT; 

alter table ca_ger.cln_Trans_base
add column division(varchar 25);

连接子句:

update ca_ger.cln_trans_base 
 set division=b.division 
from ca_Ger.cln_trans_base a 
  join divisions b on a.year_week=b.year_week;

在此之后,我跑vacuumanalyze。在此之后,我检查了 stats 表并且行数增加了一倍。

标签: amazon-web-servicessql-updateamazon-redshift

解决方案


扩展@a_horse 的建议,UPDATE 语句不应重复正在更新的表。相反,使用:

UPDATE ca_ger.cln_trans_base a
SET division = b.division 
FROM divisions b
WHERE a.year_week = b.year_week;

请参阅:PostgreSQL UPDATE Join 与一个实际示例


推荐阅读