在Postgres的SELECT查询中使用动态参数?

时间:2019-03-15 14:18:32

标签: sql postgresql

another question with this title-很抱歉重复,但是我根本无法理解该问题的答案,因此我认为其他很多人也不会,因此明确答案将很有用。

我在Postgres工作。我有一个名为duplicate_project的存储过程,它有一个参数,即项目ID。

我想在SELECT查询的WHERE子句中添加动态参数,以避免必须对数字进行硬编码。

所以我想避免硬编码:

SELECT duplicate_project(578);

而是这样:

SELECT duplicate_project(SELECT project_id FROM folder WHERE name='foo' LIMIT 1);

显然这是行不通的,但是有一种简单的方法可以做到吗?

2 个答案:

答案 0 :(得分:1)

您的意思是这样的吗?

select duplicate_project(f.project_id)
from folder f
where name = 'foo'
limit 1;

实际上不需要limit。在这种情况下,对于返回的每个project_id,您将获得多行显示duplicate_project()的结果。

或者:

SELECT duplicate_project( (SELECT project_id FROM folder WHERE name='foo' LIMIT 1) );

答案 1 :(得分:0)

一种方法是标量子查询:

SELECT duplicate_project( (SELECT project_id FROM folder WHERE name='foo' LIMIT 1) );

另一种方法是使用FROM子句:

SELECT duplicate_project(x.project_id)
FROM (SELECT project_id FROM folder WHERE name = 'foo' LIMIT 1) x;