我有這個查詢并運行它導致錯誤
SQL Error [XX000]: ERROR:
Target table must be part of an equijoin predicate
UPDATE sandbox.f_contribution
SET lpct = NVL(l.percentage, 0)
FROM sandbox.f_contribution AS f
LEFT OUTER JOIN sandbox.f_contribution_last AS l
ON f.year = l.year AND f.location = l.location AND f.category = l.category
WHERE f.year = 2020;
該檔案說,LEFT OUTER JOIN不支持,并建議“使用子查詢,清楚地分離的連接從資格更新行的標準條件”,所以我試圖修改查詢本身,而是同樣的錯誤仍然存在:
UPDATE sandbox.f_contribution
SET lpct = NVL(c.percentage, 0)
FROM (
select l.percentage
from sandbox.f_contribution AS f
LEFT OUTER JOIN sandbox.f_contribution_last AS l
ON f.year = l.year AND f.location = l.location AND f.category = l.category
) c WHERE f_contribution.year = 2020;
我應該如何修改相同的查詢以在 Redshift 中運行它?
uj5u.com熱心網友回復:
您已經閱讀了第一個 SQL 中的問題所在。您的第二個是缺少執行更新所需的資訊,特別是在 WHERE 子句中。
您的子查詢生成一組行,其中有一列稱為百分比。您的目標表有一個名為 lpct 的列,它被設定為來自子查詢的值(如果為 NULL,則為零),但是哪個子查詢值?UPDATE 假設如何將這些值應用于目標?
我懷疑您需要 WHERE 子句進行一些對齊測驗來消除這種混淆。WHERE 子句基本上就是如何將FROM 子句中的資料與子查詢中的資料連接起來。
猜測您的意圖是有風險的,但您可能打算這樣做:
UPDATE sandbox.f_contribution
SET lpct = Nvl(c.percentage, 0)
FROM sandbox.f_contribution_last AS c
WHERE f_contribution.year = c.year
AND f_contribution.location = c.location
AND f_contribution.category = c.category
AND f_contribution.year = 2020;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/365543.html
上一篇:如何LEFTJOIN與多個案例
