我基於我的回答on your previous post。下面是如何可以在序數加入unnest(string_to_array(my_column, ':'))
名爲列的例子:
t=# with a as (select id,k,v from my_table, unnest(string_to_array(my_column, ':')) with ordinality as t(k,v))
, col(s, n) as (select * from unnest(array['Title', 'First', 'Middle', 'Last']) with ordinality c (s, n))
select * from a join col on n=v;
id | k | v | s | n
----+------------+---+--------+---
1 | title=aaa | 1 | Title | 1
1 | first=bbb | 2 | First | 2
1 | middle=ccc | 3 | Middle | 3
1 | last=ddd | 4 | Last | 4
(4 rows)
當然,你將不得不加入不同(基於您以前的帖子)。但是,如果不清楚的部分是如何從表中選擇而不是從值中選擇,那麼上面的示例應該會有所幫助。
更新
認沽值表:
t=# create table keys(t text);
CREATE TABLE
Time: 91.908 ms
t=# insert into keys select unnest(array['Title', 'First', 'Middle', 'Last']);
INSERT 0 4
Time: 11.552 ms
t=# select * from keys ;
t
--------
Title
First
Middle
Last
(4 rows)
現在加入反對鍵表:
t=# with a as (select id,k,v from my_table, unnest(string_to_array(my_column, ':')) with ordinality as t(k,v))
select * from a join keys on split_part(k,'=',1) = lower(t);
id | k | v | t
----+------------+---+--------
1 | first=bbb | 2 | First
1 | last=ddd | 4 | Last
1 | middle=ccc | 3 | Middle
1 | title=aaa | 1 | Title
(4 rows)
我舉例如何從表而不是「硬編碼選擇回答值」。請詳細說明這個問題 - 如果我們之前沒有聊天,我不明白你的問題。 –