sql - Postgresql 如何将两个数组列拆分并映射为单独的列

标签 sql arrays postgresql

表有 2 个数组列键和值。 对于EG:

<表类=“s-表”> <标题> ID 键 值 <正文> 1 a、b、c、d 1,2,3,4 2 b,c 7,8 3 a,c 0,9 4 b,c,d 3,7,1

需要将键映射到值并将其拆分为单独的列

<表类=“s-表”> <标题> ID a b c d <正文> 1 1 2 3 4 2 7 8 3 0 9 4 3 7 1

最佳答案

您可以将两个字符串转换为数组,取消数组的嵌套,并将这些键/值对聚合回 JSON 值。然后可以使用该值再次提取四个 key :

select id, 
       cols ->> 'a' as a,
       cols ->> 'b' as b,
       cols ->> 'c' as c,
       cols ->> 'd' as d
from (
        select id, 
               (select jsonb_object_agg(k,v)
                from unnest(string_to_array(key,','), 
                            string_to_array(value, ',')) as x(k,v)) as cols
        from the_table        
) x
order by id;

Online example

我可能会创建一个函数来使代码更容易阅读。

关于sql - Postgresql 如何将两个数组列拆分并映射为单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75960285/

相关文章:

postgresql - Sequelize 和 2 个连接表,麻烦

SQL - 围绕 AND 的 IF 语句

java - 如何将oracle转换为JOOQ?

javascript - 两个嵌套 ng-repeat 上的 Angular 自定义过滤

c++ - 读取包含小数的文件时出现问题

ruby-on-rails - 两个独立的 has_many 表

sql - 在 SQL Server 中从 base64 字符串转换为 varbinary(max)

sql - 递归连接计数 - Oracle

php - 如何在 PHP 中从字符串创建关联数组?

PostgreSQL:创建大量 View