sql - 如何将逗号分隔的 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 解决
解决方案
你有一个糟糕的数据模型,但你可以通过一些努力做你想做的事。数组比字符串好,所以我将使用它:
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 ;
推荐阅读
- r - 如何使用 R 对复杂函数进行符号微分
- php - 如何将 php 变量传递到另一个页面而不将其重定向到该页面?
- php - 如何解决:在为访问令牌交换授权代码时,已批准的应用程序得到“客户端身份验证失败” - 仅在服务器上
- reactjs - 将数组传递给道具以创建多个盒子阴影
- prometheus - Prometheus 几分钟后会自动删除警报
- javascript - 如何修复 Angular 6 通用 server.js 中的“ReferenceError:未定义窗口”错误
- android - Android中的MVVM存储库
- c# - 如何连接json值?
- web - AUTOML有没有办法通过阅读代码来学习遗留系统来定制未来的变化
- .htaccess - 如何将 htaccess 修复为友好的 url