【发布时间】:2020-07-21 06:26:20
【问题描述】:
我有一个函数,它接受一个标量 id 值并返回表。假设它看起来像这样:
CREATE FUNCTION get_id(num int)
RETURNS TABLE(num int, name text) AS
$$
SELECT num, name FROM t1
WHERE num = $1
$$ LANGUAGE SQL;
对于示例表t1 和t2:
CREATE TABLE t1(
num int,
name text);
INSERT INTO t1 VALUES
(1, 'a'),
(2, 'b'),
(3, 'c');
CREATE TABLE t2(
num int,
name text);
INSERT INTO t2 VALUES
(1, 'xxx'),
(3, 'yyy'),
(5, 'zzz');
我可以调用我的get_id函数如下:
SELECT * FROM get_id(1)
以表格形式获取结果。但现在我想为多个 id 调用它并将结果按行堆叠在一起。我尝试了以下方法:
SELECT get_id(num) FROM (
SELECT * FROM t2
INNER JOIN t1 USING(num)) AS foo;
但这会返回复合行。我明白了,效果实际上与在标量值上调用SELECT get_id(2) 相同。但现在我想使用我的函数来返回许多 id 的结果。是否可以?如果是这样,我该如何实现?
【问题讨论】:
-
好点,已更正
标签: sql postgresql set-returning-functions