sql—获取id并返回表的函数—如何为多个id调用它?

u7up0aaq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(334)

我有一个取标量的函数 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的结果。有可能吗?如果是的话,我怎样才能做到呢?

vu8f3i0k

vu8f3i0k1#

这就是横向连接的作用:

SELECT t2.name, gi.*
FROM t2
  JOIN lateral get_id (t2.num) as gi on true

如果你不喜欢“假”加入条件 on true ,您也可以使用交叉联接,因为您的函数无论如何只返回一行:

SELECT t2.name, gi.*
FROM t2
  cross join lateral get_id (t2.num) as gi

相关问题