2014-07-17 84 views
-2

在postgresql中,我有一個函數,它接受一個用戶標識並返回他們喜歡的業餘愛好。
postgresql重複調用一個函數併合並結果

我想爲不同的userid重複調用該函數,並將結果合併以獲得不同的業餘愛好。

希望在單個sql語句中使用。 功能代碼

CREATE OR REPLACE FUNCTION usermultiplehobby() 
RETURNS TABLE (hobbyid "hobby".id%type, hobbyname "hobby".name%type) AS 
$$ 
WITH user_hobby AS (
    SELECT hobby(userid) as f 
    FROM "user" 
    where userid in (2,4,6,7,5) 
    ) 
select distinct (fr.f).id as hobbyid, (fr.f).name as hobbyname from user_hobby fr; 
$$ 
LANGUAGE 'sql'; 
+1

No try,no code ??? –

+0

我試過了,寫了一個單獨的函數,但希望它在一個單獨的sql語句中。只是想知道是否有辦法做到這一點。 – Pals

+0

請向我們展示您的功能代碼 –

回答

1

這是不是你想做什麼?也許用這個相關部分來重述這個問題。

DROP TABLE IF EXISTS hobby_data; 

CREATE TEMP TABLE hobby_data (user_id integer, hobbies text[]); 

INSERT INTO hobby_data (user_id, hobbies) VALUES 
    (1, ARRAY['chess', 'tennis']), 
    (2, ARRAY['chess', 'philately']), 
    (3, ARRAY['knitting', 'car restoration']); 

CREATE OR REPLACE FUNCTION get_hobbies(user_id INTEGER) 
RETURNS text[] AS 
$BODY$ 
    SELECT hobbies 
    FROM hobby_data 
    WHERE user_id = $1; 
$BODY$ LANGUAGE sql; 

WITH users AS (
    SELECT user_id 
    FROM hobby_data 
    WHERE user_id IN (1,2)) 
SELECT DISTINCT unnest(get_hobbies(user_id)) 
FROM users; 
0

功能代碼

CREATE OR REPLACE FUNCTION usermultiplehobby() 
RETURNS TABLE (hobbyid "hobby".id%type, hobbyname "hobby".name%type) AS 
$$ 
WITH user_hobby AS (
    SELECT hobby(userid) as f 
    FROM "user" 
    where userid in (2,4,6,7,5) 
    ) 
select distinct (fr.f).id as hobbyid, (fr.f).name as hobbyname from user_hobby fr; 
$$ 
LANGUAGE 'sql';