更新表格';s字段使用另一个表';s字段将其映射到Postgresql中的第三个表

更新表格';s字段使用另一个表';s字段将其映射到Postgresql中的第三个表,postgresql,join,sql-update,case,talend,Postgresql,Join,Sql Update,Case,Talend,我有3个表:landmark、trans和output。模式是测试模式绿色是表格,蓝色突出显示的是列。可以在国家和地区之间进行映射。 我的母国当前的母国区域为空。我需要找到母国区域为空的母国的母国区域值。 该表应得到更新 如果landmark.pgs\u country=output.home\u country,则设置landmark.region=output.home\u region. 但是,如果在输出表中发现与地标-国家名称不匹配的国家US-GM,则应 将其映射到trans table

我有3个表:landmark、trans和output。模式是测试模式绿色是表格,蓝色突出显示的是列。可以在国家和地区之间进行映射。
我的母国当前的母国区域为空。我需要找到母国区域为空的母国的母国区域值。

该表应得到更新
如果landmark.pgs\u country=output.home\u country,则设置landmark.region=output.home\u region.

但是,如果在输出表中发现与地标-国家名称不匹配的国家US-GM,则应 将其映射到trans table以检查

如果output.home\u country=trans.ib\u country,则选择trans.xperia\u country进行匹配,并将其与landmark.country\u name ietrans.xperia\u country=landmark.country\u name相等,然后设置landmark.region=output.home\u region以查找国家US-GM的home\u地区。 因此,基本上更新必须设置landmark.region=output.home\u region

如何为输出表更新此选项?

如下所示:

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;

如果您可以在模型中定义更多的规则,这将以一种更简单的方式完成,这意味着可以强制实施更好的完整性。很明显,我不是说“你必须”,我甚至认为你不能(或者也许这个洞的事情首先是关于它的工作)。我只是想解释一下,这些左连接的使用,因为你似乎不能想当然。上面的答案是,如果home\u region总是,但在我的数据中home\u region并不总是空的。我的连接最初是在l.pgs\u country=o.home\u country之间。pgs_国家/地区并不总是空的。如果为空,则必须在o.home\u country=t.ib\u country之间进行连接,以便获得t.xperia\u country的值。一旦我得到t.xperia\u country的值,我就必须在l.country\u name=t.xperia\u country之间加入,以得到o.home\u区域。这是答案。@user1538020根据您的新详细信息更新了我的答案。home\u区域并不总是空的。我的连接最初是在l.pgs\u country=o.home\u country之间。pgs_国家/地区并不总是空的。如果为空,则必须在o.home\u country=t.ib\u country之间进行连接,以便获得t.xperia\u country的值。一旦我得到t.xperia\u country的值,我就必须在l.country\u name=t.xperia\u country之间加入,以得到o.home\u区域。这是它的基本原理。