将结果列从函数集成到主查询
Integrating resultant columns from function to main query
我创建了一个返回单行三列的 table 的函数。
DROP FUNCTION IF EXISTS get_event_deposit_values(INTEGER, date, date);
CREATE OR REPLACE FUNCTION get_event_deposit_values(event_id INTEGER, start_date date, end_date date)
RETURNS TABLE (carried_over INTEGER, current_month INTEGER, deposit INTEGER)
AS $$
DECLARE status INTEGER;
BEGIN
carried_over := 0;
current_month := 0;
deposit := 0;
RETURN QUERY
SELECT carried_over, current_month, deposit;
END
$$ LANGUAGE plpgsql;
运行 pgAdmin 中的一个简单查询。
select * FROM get_event_deposit_values(20170913, '1999/01/01', '2018/05/11');
它 returns 三列一行。
然后,运行 结合主查询的查询(在网站上看到的)。
select t.id from t_events AS t, lateral get_event_deposit_values(t.id, '1999/01/01', '2018/05/11') where id = 20170913;
get_event_deposit_values(t.id
附近发生错误。我使用的 PostgreSQL 运行ning 是 8.3 版,已经过时了。有没有其他方法可以做到这一点?
documentation on lateral subqueries(在第一个版本中,支持它,如果我没有忽略的话是 9.3)状态,table 函数默认是横向的没有关键字。因此,您的版本中也可能存在这种情况。
所以试试看,如果您只是删除关键字 LATERAL
。
如果这不起作用(如我所料),您可以 select 列列表中子查询中函数的每个不同列作为变通方法。
SELECT t.id,
(SELECT carried_over
FROM get_event_deposit_values(t.id, '1999/01/01', '2018/05/11')) carried_over,
(SELECT current_month
FROM get_event_deposit_values(t.id, '1999/01/01', '2018/05/11')) current_month,
(SELECT deposit
FROM get_event_deposit_values(t.id, '1999/01/01', '2018/05/11')) deposit
FROM t_events t
WHERE t.id = 20170913;
(并可能考虑更新到更新的版本。)
我创建了一个返回单行三列的 table 的函数。
DROP FUNCTION IF EXISTS get_event_deposit_values(INTEGER, date, date);
CREATE OR REPLACE FUNCTION get_event_deposit_values(event_id INTEGER, start_date date, end_date date)
RETURNS TABLE (carried_over INTEGER, current_month INTEGER, deposit INTEGER)
AS $$
DECLARE status INTEGER;
BEGIN
carried_over := 0;
current_month := 0;
deposit := 0;
RETURN QUERY
SELECT carried_over, current_month, deposit;
END
$$ LANGUAGE plpgsql;
运行 pgAdmin 中的一个简单查询。
select * FROM get_event_deposit_values(20170913, '1999/01/01', '2018/05/11');
它 returns 三列一行。
然后,运行 结合主查询的查询(在网站上看到的)。
select t.id from t_events AS t, lateral get_event_deposit_values(t.id, '1999/01/01', '2018/05/11') where id = 20170913;
get_event_deposit_values(t.id
附近发生错误。我使用的 PostgreSQL 运行ning 是 8.3 版,已经过时了。有没有其他方法可以做到这一点?
documentation on lateral subqueries(在第一个版本中,支持它,如果我没有忽略的话是 9.3)状态,table 函数默认是横向的没有关键字。因此,您的版本中也可能存在这种情况。
所以试试看,如果您只是删除关键字 LATERAL
。
如果这不起作用(如我所料),您可以 select 列列表中子查询中函数的每个不同列作为变通方法。
SELECT t.id,
(SELECT carried_over
FROM get_event_deposit_values(t.id, '1999/01/01', '2018/05/11')) carried_over,
(SELECT current_month
FROM get_event_deposit_values(t.id, '1999/01/01', '2018/05/11')) current_month,
(SELECT deposit
FROM get_event_deposit_values(t.id, '1999/01/01', '2018/05/11')) deposit
FROM t_events t
WHERE t.id = 20170913;
(并可能考虑更新到更新的版本。)