我有一个函数,可以返回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
的调用更多)
答案 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);