1

我需要对一个非常大的表中的一组行进行一些非常复杂的操作。

似乎操作(基于 JOIN、UNION 和几个 ORDER BY 的“回填”空属性)最好在函数中完成。为了最小化行数,我一开始就需要一个 WHERE 子句。

因为所有这些都将与 Rails 对话,所以外层需要是一个 VIEW。

减去我所拥有的回填物

CREATE OR REPLACE VIEW testing.for_sale_layouts_view
AS SELECT * from bestforsalelayout((select address_id from public.for_sale_layouts limit 1));
;

CREATE OR REPLACE FUNCTION bestforsalelayout(addr_id int)
RETURNS public.for_sale_layouts
AS $$
    select * from public.for_sale_layouts where address_id = addr_id;
$$
LANGUAGE SQL IMMUTABLE;

叫像

select * from testing.for_sale_layouts_view where address_id = <addr_id>;

这种方法有效,但是如果 for_sale_layouts 返回的行不止一行,则该函数不返回任何内容,则单例行可以正常工作。

我很茫然,非常感谢您提供工作方向的指示。

4

1 回答 1

1

如果要返回多行,则需要return table函数的形式。

在此处查看文档。

CREATE OR REPLACE FUNCTION bestforsalelayout(addr_id int)
RETURNS table(for_sale_layouts int)
AS $$
    select for_sale_layouts from public.for_sale_layouts where address_id = addr_id;
$$
于 2013-06-04T02:03:10.440 回答