通过联接或其他方式基于匹配的 ID 填充表列中的空行



只是为了设置级别:我正在使用SQL在Vertica数据库中工作。

假设我有两个表:表 A 和表 B。假设表 A 是我的最终/主表,用于 Tableau 中的数据(或类似内容(,并且表 B 根据第三表表 C 中的匹配项将某些列馈送到表 A 中(与此对话无关(。

按原样,表 A 包含以下列:

ProgramName [varchar(50)]
CustomerName [varchar(50)]
Total_Cost [numeric(18,4)]

按原样,表 B 包含以下列:

CustomerCode [varchar(10)]
Total_Cost [numeric(18,4)]

我想做的是将表 A 的"客户名称"列更新为等于表 B 中的"客户代码",其中 total_cost_dollars 列在表中彼此相等。

我运行了这个左联接查询,以确保当我将表 A 的 CustomerName 更新为等于 CustomerCode 时,总成本列与我的整个数据集完全/真实匹配。

SELECT
A.ProgramName,
A.CustomerName,
A.total_cost_dollars,
B.CustomerCode,
B.total_cost_dollars
FROM
TableA A
LEFT JOIN
TableB B
ON
B.total_cost_dollars = A.total_cost_dollars
WHERE
A.CustomerName IS NULL;

关于如何解决这个问题的任何想法?

由于 Vertica 支持合并查询,因此可以使用 merge 语句:

merge into TableA A
using TableB B
ON (B.total_cost_dollars = A.total_cost_dollars)
when matched then
update
set
A.CustomerName = B.CustomerCode
where
A.CustomerName IS NULL;

最新更新