如果在update语句中使用or运算符,则得到的错误目标表必须是equijoin predicate 的一部分。我也尝试了in运算符,但得到了相同的错误,
我原来的更新查询是
UPDATE db.table1
SET col1 = table2.col1,
col2 = table2.col2
FROM table2
WHERE ( col3 = table2.col3
OR col3 = table2.col4 )
AND col5 = 'some string';
我尝试使用in运算符,但得到相同的错误
UPDATE db.table1
SET col1 = table2.col1,
col2 = table2.col2
FROM table2
WHERE col3 IN ( table2.col3, table2.col4 )
AND col5 = 'some string';
在redshift update语句中有什么替代方法?
3条答案
按热度按时间vltsax251#
这是一个红移限制-基本上它只接受更新的连接条件中的相等条件的交集
OR
运营商未能满足交叉部分,以及IN
不会欺骗数据库)。对于此查询,我认为将其拆分为两个语句可能更简单—效率较低,但至少有可能:
kyxcudwk2#
如果您限定列引用,它是否有效?
这个
?
因为我不知道那是哪张table。6ss1mwsb3#
我的同事给了我另一个选择,谢谢