更新语句:错误:目标表必须是等值连接谓词的一部分

时间:2016-12-28 18:55:03

标签: sql sql-update amazon-redshift

当我尝试更新表1的列时,我遇到此错误,就像表2中的列一样。

目标表必须是equijoin谓词的一部分。

update test
   set category = t1.category
from category_type t1, test t2
where t2.link ilike '%' || t1.type || '%'
and t2.link ilike '%.nike.com/%';

Category_Type表如下所示:

type       category
sandals     shoes
boots       shoes
t-shirts    apparel
-pants      apparel

2 个答案:

答案 0 :(得分:0)

我不知道Redshift,但是在Postgres中,你不能在FROM语句的UPDATE子句中重复目标表:

update test t2
   set category = t1.category
from category_type t1  --<< do NOT repeat the target table here
where t2.link ilike '%' || t1.type || '%'
  and t2.link ilike '%.nike.com/%'; 

答案 1 :(得分:0)

你应该能够加入像这样的子查询:

update test set category = t1.category
from (
    select c.category, t.link
    from category_type c, test t
    where t.link ilike '%' || c.type || '%'
        and t.link ilike '%.nike.com/%';
) t1
where test.link = t1.link

AWS docs在页面下方有加入示例。最后一个示例显示了子查询的好处。

此查询的基本形式为:

update target set val=t2.val
from (
    select t.id, o.val
    from target t
    join other o on o.id=t.id
) t2
where target.id = t2.id