我有程序:
CREATE OR REPLACE FUNCTION func()
RETURNS SETOF bigint AS
$BODY$
DECLARE
rowsQuantity bigint;
BEGIN
return query select p.id from product p where...;
GET DIAGNOSTICS rowsQuantity = ROW_COUNT;
if(rowsQuantity < 8) then
return query select p.id from product p where p.id not in (ids from prev query) limit 8 - rowsQuantity;
end if;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
我的问题是,如何从第一个查询中获取id以在第二个查询中使用它们,或者我可以以某种方式声明变量并从第一个查询中选择此变量id,然后在第二个查询中使用此变量? 我无法为我的任务找到解决方案......请帮助我
我使用Postgresql版本9.3.6
你到底想要做什么?整个功能似乎过于复杂。如果你告诉我们你想要解决的潜在问题,这可能只需要一个查询就可以完成。编辑您的问题根据该数据添加一些示例数据和预期输出。 - a_horse_with_no_name 3分钟前
我的程序必须返回8条记录,第一条查询有很多条件(并且由于这个条件,结果集ROW COUNT可能少于8条记录)这就是为什么我需要检查第一次查询的ROW COUNT少于8条记录,i必须从另一个查询添加记录到结果集,但我需要避免重复,第二个查询必须返回0 ... 8行(取决于第一个查询),但没有第一个查询的重复,这就是为什么我需要从第一个查询的ID
从产品p听到一个简单的选择不同的p.id,其中... limit 8;会做的工作
不,第二个查询包含我从第一个查询收到的记录(带有ids), 第二个查询中的DISTINCT没有帮助
答案 0 :(得分:1)
您可以使用临时表:
begin
create temp table tt as
select id
from product
where...
row_ct = (select count(*) from tt);
return query select * from tt;
if row_ct < 8 then
return query select id
from product
where id not in (select id from tt)
limit 8 - row_ct;
end if;
drop table tt;
end;