我有以下两个查询:
查询# 1
(SELECT ARRAY (SELECT (journeys.id)
FROM JOURNEYS
JOIN RESPONSES ON scenarios[1] = responses.id) AS arry);
返回一个数组。
查询# 2:
SELECT (journeys_index.j_index)
FROM journeys_index
WHERE environment = 'env1'
AND for_channel = 'ch1'
AND first_name = 'name1';
第二个查询返回前一个数组中的元素索引。
如何将两者组合起来以只获得元素值?
我用一个包含数组列(第一次查询的结果)的表重新创建了一个更简单的示例
create table my_array_test (id int, tst_array varchar[]);
insert into my_array_test values (1,'{cat, mouse, frog}');
insert into my_array_test values (2,'{horse, crocodile, rabbit}');
和另一个表为每一行包含元素的位置我想提取。
create table my_array_pos_test (id int, pos int);
insert into my_array_pos_test values (1,1);
insert into my_array_pos_test values (2,3);
。从my_array_test
和id=1
的行中,我想提取1st
项(pos=1
),从my_array_test
和id=2
的行中,我想提取3rd
项(pos=3
)
defaultdb=> select * from my_array_pos_test;
id | pos
----+-----
1 | 1
2 | 3
(2 rows)
现在生成的语句是
select *,
tst_array[my_array_pos_test.pos]
from
my_array_test join
my_array_pos_test on my_array_test.id = my_array_pos_test.id
显示预期结果
id | tst_array | id | pos | tst_array
----+--------------------------+----+-----+-----------
1 | {cat,mouse,frog} | 1 | 1 | cat
2 | {horse,crocodile,rabbit} | 2 | 3 | rabbit
(2 rows)
现在,在你的情况下,我可能会做一些类似于下面,假设你的1日select语句返回一行。
with array_sel as
(SELECT ARRAY (SELECT (journeys.id)
FROM JOURNEYS
JOIN RESPONSES ON scenarios[1] = responses.id) AS arry)
SELECT arry[journeys_index.j_index]
FROM journeys_index cross join array_sel
WHERE environment = 'env1'
AND for_channel = 'ch1'
AND first_name = 'name1';
我不能完全验证上面的sql语句,因为我们不能复制你的表,但应该给你一个提示,从哪里开始