我有3个表:地标,反式和输出。模式是测试模式。 绿色是表格,蓝色突出显示的是列。可以在国家和地区之间进行映射。
我有home_country现在有一个home_region为null。我需要找到home_country的home_region的值,该home_country的home region为null。
表格应该更新
如果 landmark.pgs_country = output.home_country ,则设置landmark.region = output.home_region。
但是,如果输出表中的国家 US-GM 与 landmark - country_name 无法匹配,那么它应该 使用 trans table 将其映射以检查
如果 output.home_country = trans.ib_country ,则将trans.xperia_country用于该匹配,并将其与landmark.country_name等同,即 trans.xperia_country = landmark.country_name , 设置landmark.region = output.home_region 以查找国家US-GM的home_region。 所以基本上更新必须设置landmark.region = output.home_region 。
如何为输出表更新此内容?
答案 0 :(得分:0)
像这样:
WITH possible_joins AS (
SELECT
o.home_country
, COALESCE(l1.region, l2.region) AS region
FROM
output o
LEFT JOIN landmark l1 ON l1.pgs_country = o.home_country
LEFT JOIN trans t ON t.ib_country = o.home_country
LEFT JOIN landmark l2 ON l2.country_name = t.xperia_country
WHERE
o.home_region IS NULL
)
UPDATE
output o
SET
home_region = p.region
FROM
possible_joins p
WHERE
o.home_country = p.home_country
AND o.home_region IS NULL;
如果您可以在模型中定义更多规则,这可以更简单的方式完成,这意味着强加更好的完整性。我显然没有说'你必须这样做,我甚至认为你不能(或者这个洞可能是关于它的第一个工作)。我只是想解释一下,使用那些左连接,因为看起来你不能把任何事情视为理所当然。