接受 id 并返回表的函数 - 如何为多个 id 调用它?
Posted
技术标签:
【中文标题】接受 id 并返回表的函数 - 如何为多个 id 调用它?【英文标题】:Function that takes id and returns the table - how to call it for multiple ids? 【发布时间】: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 的结果。是否可以?如果是这样,我该如何实现?
【问题讨论】:
好点,已更正 【参考方案1】:这就是横向连接的用途:
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
【讨论】:
以上是关于接受 id 并返回表的函数 - 如何为多个 id 调用它?的主要内容,如果未能解决你的问题,请参考以下文章