2017-06-22 57 views
0

,我有以下数据:在处理多个返回值的子查询

cte 
================= 
gp_id | m_ids 
------|---------- 
1  | {123} 
2  | {432,222} 
3  | {123,222} 

而且具有这样的特征(这其实不是返回一个表,但一对夫妇的id)函数:

FUNCTION foo(m_ids integer[]) 
RETURNS TABLE (
    first_id integer, 
    second_id integer 
) 

现在,我必须遍历每一行和与该功能进行一些计算,所以我会得到这样的事情:

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 *声明。如果我使用SELECT first_id,一切正常(除了我要跑两个连续的查询,我想避免,显然这),但在前者的情况下,我发现了错误

子查询必须只返回一列

这是有点期待的。
那么我怎样才能正确迭代在一个单一的查询表中?

回答

1

使用功能在横向联接:

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

非常感谢你,这是非常有帮助的! –