Sql 在子查询中处理多个返回值

Sql 在子查询中处理多个返回值,sql,postgresql,postgresql-9.4,Sql,Postgresql,Postgresql 9.4,我有以下数据: cte ================= gp_id | m_ids ------|---------- 1 | {123} 2 | {432,222} 3 | {123,222} 还有一个具有如下签名的函数(实际上返回的不是一个表,而是几个ID): 现在,我必须迭代每一行,并使用该函数执行一些计算,所以我会得到如下结果: gp_id | first_id | second_id ------|----------|----------- 1

我有以下数据:

cte
=================
gp_id | m_ids
------|----------
1     | {123}
2     | {432,222}
3     | {123,222}
还有一个具有如下签名的函数(实际上返回的不是一个表,而是几个ID):

现在,我必须迭代每一行,并使用该函数执行一些计算,所以我会得到如下结果:

gp_id | first_id | second_id 
------|----------|-----------
1     | 25       | 25        
2     | 13       | 24        
3     | 25       | 11        
为了实现这一点,我尝试了以下代码:

SELECT gp_id, 
       ( 
              SELECT * 
              FROM   foo( 
                     ( 
                            SELECT m_ids 
                            FROM   cte c2 
                            WHERE  c2.gp_id = c1.gp_id)) limit 1) 
FROM   cte c1
问题出在
SELECT*
语句中。如果我使用
selectfirst\u id
,一切都很好(除了我必须运行两个连续的查询,这显然是我想要避免的),但在前一种情况下,我得到了错误

子查询只能返回一列

这有点出乎意料。

那么,如何在一个查询中正确迭代表?

在横向联接中使用该函数:

select gp_id, first_id, second_id
from cte, 
lateral foo(m_ids);
select gp_id, first_id, second_id
from cte, 
lateral foo(m_ids);