How to solve ERROR: Target table must be part of an equijoin predicate in Redshift?
How to solve ERROR: Target table must be part of an equijoin predicate in Redshift?
我想根据特定条件用另一个红移 table (table2) 的列更新红移 table (table1) 的两列。当 运行 以下查询时,我收到等值连接谓词错误。
UPDATE schema1.table1
SET col1 = sub.col3,
col2 = sub.col4
FROM (
SELECT a.col1, a.col2, b.col3, b.col4 FROM schema1.table1 a LEFT JOIN schema2.table2 b
ON ((a.col5 > b.col6) AND (a.col5 < b.col7))
)sub;
所以问题是 Redshift 无法确定您要更新哪一行。应该有一个 WHERE 子句指示 from-select 的结果如何与正在更新的 table 相匹配。
这是 Redshift 文档中的示例:
update category set catid=100
from (select event.catid from event left join category cat on event.catid=cat.catid) eventcat
where category.catid=eventcat.catid
and catgroup='Concerts';
即使在“from-select”中引用了 table“类别”,Redshift 也需要 WHERE 子句来对齐结果。另请注意,“from-select”中对“类别”的引用需要使用别名以避免混淆。
现在让我们看看您的查询(格式化):
UPDATE schema1.table1 SET col1 = sub.col3, col2 = sub.col4
FROM (SELECT a.col1, a.col2, b.col3, b.col4
FROM schema1.table1 a
LEFT JOIN schema2.table2 b
ON ( ( a.col5 > b.col6 ) AND ( a.col5 < b.col7 ) ))sub;
您需要一个 WHERE 子句来让 Redshift 知道在哪里应用“from-select”的每一行。这可以像
一样简单
WHERE table1.col1 = sub.col1 AND table1.col2 = sub.col2
但由于我不知道你的数据模型,所以这可能完全关闭。
这里还有一个危险,就是使用不等式连接生成FROM结果可能会导致大量的行和重复更新。
我想根据特定条件用另一个红移 table (table2) 的列更新红移 table (table1) 的两列。当 运行 以下查询时,我收到等值连接谓词错误。
UPDATE schema1.table1
SET col1 = sub.col3,
col2 = sub.col4
FROM (
SELECT a.col1, a.col2, b.col3, b.col4 FROM schema1.table1 a LEFT JOIN schema2.table2 b
ON ((a.col5 > b.col6) AND (a.col5 < b.col7))
)sub;
所以问题是 Redshift 无法确定您要更新哪一行。应该有一个 WHERE 子句指示 from-select 的结果如何与正在更新的 table 相匹配。
这是 Redshift 文档中的示例:
update category set catid=100
from (select event.catid from event left join category cat on event.catid=cat.catid) eventcat
where category.catid=eventcat.catid
and catgroup='Concerts';
即使在“from-select”中引用了 table“类别”,Redshift 也需要 WHERE 子句来对齐结果。另请注意,“from-select”中对“类别”的引用需要使用别名以避免混淆。
现在让我们看看您的查询(格式化):
UPDATE schema1.table1 SET col1 = sub.col3, col2 = sub.col4
FROM (SELECT a.col1, a.col2, b.col3, b.col4
FROM schema1.table1 a
LEFT JOIN schema2.table2 b
ON ( ( a.col5 > b.col6 ) AND ( a.col5 < b.col7 ) ))sub;
您需要一个 WHERE 子句来让 Redshift 知道在哪里应用“from-select”的每一行。这可以像
一样简单WHERE table1.col1 = sub.col1 AND table1.col2 = sub.col2
但由于我不知道你的数据模型,所以这可能完全关闭。
这里还有一个危险,就是使用不等式连接生成FROM结果可能会导致大量的行和重复更新。