LEFT JOIN 查询更新左表中的值

问题描述 投票:0回答:1

每当我们连接两个具有通用名称的表时,这些通用名称就会重复。但是,如果您想要执行左连接并替换值(尤其是 NULL 值)怎么办?要更新表,您可以使用 MERGE 运算符,但是在查询中呢?

下表是所需功能的清晰文档。我们如何在查询中实现这一点?例如

  SELECT * 
    FROM table1 LEFT JOIN table2 USING(date) 
                LEFT_MERGING(col2)
    -- LEFT_MERGING prefers the left-hand col2 value if there is one. 

表1:

date        | col1 | col2  
------------+------+------
'2023-08-01'|    1 |  20
'2023-08-02'|    2 | NULL
'2023-08-03'|    3 | NULL
'2023-08-04'|    4 | NULL
'2023-08-05'|    5 | NULL
'2023-08-06'|    6 | NULL

表2:

 date        | col2
 ------------+------
 '2023-08-03'|  22
 '2023-08-04'|  23

目标:

date        | col1 | col2  
------------+------+------
'2023-08-01'|    1 |  20
'2023-08-02'|    2 | NULL
'2023-08-03'|    3 |  22
'2023-08-04'|    4 |  23
'2023-08-05'|    5 | NULL
'2023-08-06'|    6 | NULL
postgresql left-join
1个回答
0
投票

通过正确的逻辑,您可以使用 COALESCE 函数和 LEFT JOIN 实现所需的功能。 COALESCE 函数返回表达式列表中的第一个非 NULL 值。

以下是如何使用 LEFT JOIN 和 COALESCE 的组合来实现 AIM 结果:

选择 t1.日期, t1.col1, COALESCE(t2.col2, t1.col2) AS col2 从 表1 t1 左连接 表2 t2 ON t1.date = t2.date USING(date);

© www.soinside.com 2019 - 2024. All rights reserved.