如何将逗号分隔的ID列表转换为它们的名称?

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

我有一个包含以下内容的表:

id   task_ids
1    10,15
2    NULL
3    17

我有具有此任务名称的表:

id  task_name
10    a
15    b
17    c

我想生成以下输出

id task_ids task_names
1   10,15    a,b
2    null    null
3    17      c

我知道这个结构不是理想的,但是这是旧表,我现在不会更改。

是否有简单的方法来获取输出?我正在使用Presto,但我认为可以使用本机sql解决此问题

sql presto
1个回答
0
投票

您的数据模型太糟糕了,但是您可以花些力气来做自己想做的事情。数组比字符串更好,所以我只用它:

select t.id, t.task_id, array_agg(tt.task_name) as task_names
from t left join lateral
     unnest(split(t.task_ids, ',')) u(task_id)
     on 1=1 left join
     tasks tt
     on tt.task_id = u.task_id
group by t.id, t.task_id;

我手头没有Presto来测试。但是,此变体或某些较小的变体应该可以满足您的要求。

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