我所追求的最终结果是一个调用函数的查询,该函数返回一组位于各自字段中的记录。我可以这样做,但函数的结果都在一个字段中。 即: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
感谢您的阅读。如果你想通过两次击中同一个表或我的命名约定来讨价还价我正在做的事情的语义 - >这是一个简化的测试。
答案 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
条件。