每当我们连接两个具有通用名称的表时,这些通用名称就会重复。但是,如果您想要执行左连接并替换值(尤其是 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
通过正确的逻辑,您可以使用 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);