在psql中运行并引用一次函数

时间:2019-06-09 08:18:47

标签: postgresql

我有一个函数,可以返回ID表以进行复杂的节点查找。

使用此函数的查询不只需要一次-有一种方法可以一次获取并命名函数结果-使代码更简洁:

SELECT channels.name
FROM channels
WHERE (
      channels.to_id   IN (SELECT matchingNodes(1,1)) 
  AND channels.from_id IN (SELECT matchingNodes(1,1))
); 

我使用的是PostgreSQL 11,查询变得更加复杂(对matchingNodes的调用更多)

1 个答案:

答案 0 :(得分:1)

您可以使用common table expression

假设将函数matchnodes定义为returns table (...),则也可以通过两次选择函数的列来避免第二个子查询。首先应在FROM子句中使用返回集合的函数。

因此,使用select matchingnodes(1,1)代替select id, id from matchingnodes(1,1)(假设函数返回的列名为id

with nodes as (
  select id, id
  from matchingnodes(1,1)
) 
select ch.name
from channels ch
where (ch.to_id, ch.from_id) in (select id, id,
                                 from nodes);