避免将PostgreSQL函数结果放入一个字段中

时间:2015-10-22 00:50:03

标签: postgresql

我所追求的最终结果是一个调用函数的查询,该函数返回一组位于各自字段中的记录。我可以这样做,但函数的结果都在一个字段中。 即:http://i.stack.imgur.com/ETLCL.png,我所追求的结果是:http://i.stack.imgur.com/wqRQ9.png

以下是创建表格的代码

CREATE TABLE tbl_1_hm
(
tbl_1_hm_id bigserial NOT NULL,
tbl_1_hm_f1 VARCHAR (250),
tbl_1_hm_f2 INTEGER,
CONSTRAINT tbl_1_hm PRIMARY KEY (tbl_1_hm_id)   
)

-- do that for a few times to get some data
INSERT INTO tbl_1_hm (tbl_1_hm_f1, tbl_1_hm_f2)
VALUES ('hello', 1);

CREATE OR REPLACE FUNCTION proc_1_hm(id BIGINT)
RETURNS TABLE(tbl_1_hm_f1 VARCHAR (250), tbl_1_hm_f2 int AS $$
  SELECT tbl_1_hm_f1, tbl_1_hm_f2
  FROM tbl_1_hm 
  WHERE tbl_1_hm_id = id
$$ LANGUAGE SQL;

--And here is the current query I am running for my results:
SELECT t1.tbl_1_hm_id, proc_1_hm(t1.tbl_1_hm_id) AS t3
FROM tbl_1_hm AS t1

感谢您的阅读。如果你想通过两次击中同一个表或我的命名约定来讨价还价我正在做的事情的语义 - >这是一个简化的测试。

1 个答案:

答案 0 :(得分:1)

当函数返回一组记录时,您应将其视为表源:

SELECT t1.tbl_1_hm_id, t3.*
FROM tbl_1_hm AS t1, proc_1_hm(t1.tbl_1_hm_id) AS t3;

请注意functions are implicitly using a LATERAL join(向下滚动到第4和第5小节),这样您就可以使用前面列出的表中的字段,而无需指定明确的JOIN条件。