2017-06-22 49 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

非常感謝你,這是非常有幫助的! –