我有一个取标量的函数 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的结果。有可能吗?如果是的话,我怎样才能做到呢?
1条答案
按热度按时间vu8f3i0k1#
这就是横向连接的作用:
如果你不喜欢“假”加入条件
on true
,您也可以使用交叉联接,因为您的函数无论如何只返回一行: