sql - 使用 MERGE INTO 和 sql/spark 用另一个表更新一个表
问题描述
在此处跟进有关获取列的唯一行 ID 的问题/答案。所以现在我想将我的查询保存为一个表,并用我更改了列 ID 的行更新现有表。
我的数据如下所示:
原始表,命名分类
level_4 level_5 level_6 level_7 system_id node_id
American League West null null 4 633
American League East null null 4 634
National League West Dodgers bellinger 3 635
National League Central Cardinals null null null
American League Central null null null null
我要更新的新表,名为 taxonomies_update
level_4 level_5 level_6 level_7 system_id node_id
American League West null null 4 633
American League East null null 4 634
National League West Dodgers bellinger 3 635
National League Central Cardinals null null 636
American League Central null null null 637
所以这是我到目前为止得到的:
CREATE TABLE taxonomies_update AS
SELECT
system_id,
t2.min_node-1+row_number() OVER (ORDER BY -tn.node_id desc) node_id, `level_4`, `level_5`, `level_6`, `level_7`
FROM
taxonomies tn
cross join
(SELECT min(node_id) as min_node FROM taxonomies) as t2;
MERGE INTO taxonomies
USING taxonomies_update
ON taxonomies.node_id = taxonomies_update.node_id
WHEN MATCHED THEN
UPDATE SET taxonomies.node_id = taxonomies_update.node_id
WHEN NOT MATCHED
THEN INSERT (node_id) VALUES (node_id);
这运行没有错误,但我原来的分类表有新的行,但他们没有新的 node_id 连同它。我已经尝试了改变ON
行,摆脱WHEN MATCHED
行和THEN INSERT
行的各种组合。
提前致谢!
解决方案
推荐阅读
- javascript - 从对象数组中提取属性并存储在另一个对象数组中
- php - 单元格的所有背景颜色都相同
- javascript - 如何从 JSON 对象数组中检索不同类型的数据并使用它?
- java - 运行了附加查询,但它不是 select 语句的一部分
- css - 为什么位置属性会影响显示属性?
- mysql - 如何在两个表上分组并应用聚合函数?
- java - 如何使用 "assertThat().body("email", is(email)); 来验证某些响应?
- three.js - InstancedBufferGeometry 负比例问题
- algorithm - 如何优化大列表聚合
- r - 如何将其写入R中的循环?