首页 > 解决方案 > 如何将逗号分隔的 ID 列表转换为他们的名字?

问题描述

我有一个表,其中包含:

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 解决

标签: sqlpresto

解决方案


你有一个糟糕的数据模型,但你可以通过一些努力做你想做的事。数组比字符串好,所以我将使用它:

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 来测试这个。但是这个或一些小的变体应该做你想要的。

编辑:

此版本可能有效:

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

推荐阅读