使用PLPGSQL函数会导致连接查询

时间:2018-01-08 05:41:07

标签: postgresql plpgsql

我正在开发一个应用程序,其数据库为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

如何在第二个函数中使用第一个函数的结果?我用注释指定的地方。

1 个答案:

答案 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