我正在开发一个应用程序,其数据库为Postgres 9.5
我有以下plpgsql
功能
CREATE OR REPLACE FUNCTION public.getall_available_products(
IN start_day_id integer,
IN end_day_id integer)
RETURNS TABLE(id integer) AS
$BODY$
SELECT product_id As id
FROM product_days
WHERE available > 0
AND days_id BETWEEN start_day_id AND end_day_id
$BODY$
LANGUAGE sql VOLATILE
我需要在另一个join
的{{1}}查询中使用上述函数的结果
功能
plpgsql
如何在第二个函数中使用第一个函数的结果?我用注释指定的地方。
答案 0 :(得分:2)
您可以从表格或视图等集合/表格返回功能中进行选择。在你的情况下:
SELECT pd.days_id As pd_days_id, pd.id AS p_id, pd.name AS p_name
FROM product p JOIN product_days pd USING(id)
WHERE pd.id IN
(SELECT a.id FROM public.getall_available_products(start_day_id, end_day_id) a);
您甚至可以加入功能:
SELECT pd.days_id As pd_days_id, pd.id AS p_id, pd.name AS p_name
FROM product p JOIN product_days pd USING(id)
JOIN public.getall_available_products(start_day_id, end_day_id) a ON pd.id = a.id;
这应该给出相同的结果。
注意:如果您希望将列值作为函数参数传递,则应该查看相对较新的关键字LATERAL
。