如何组合两个查询,其中一个结果在一个数组和第二个是数组中的元素位置?



我有以下两个查询:

查询# 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_testid=1的行中,我想提取1st项(pos=1),从my_array_testid=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语句,因为我们不能复制你的表,但应该给你一个提示,从哪里开始

相关内容

  • 没有找到相关文章

最新更新