使用不同的参数postgresql多次执行相同的查询
Execute same query multiple times with different parameter postgressql
我不知道如何轻松解释我需要做什么,但我会尝试。
假设我有一个用户 table 和 5 个用户。
id name
1 Steve
2 Pat
3 Robin
4 Carl
5 Sarah
而不是只做一个 select * from users
我需要做这个不同的和更困难的。
我需要构建一个查询,为用户 table 中的每一行运行一个带有参数(名称)的查询,然后给我与 select * from users
相同的输出
我知道这听起来很奇怪,但这是我真正需要做的..
所以我想要发生的是:
我需要遍历用户 table 以找出有多少行。 (5)
-这就是我要执行查询的次数。
每次执行查询时,我都需要更改 where 子句中的名称。第一次执行 = Steve,第二次执行 = Pat 等等。
最后我只想要一个输出,所以我需要合并结果。
如果我手动执行此操作,它将如下所示:
Select id, name from users where name = 'Steve'
union all
Select id, name from users where name = 'Pat'
union all
Select id, name from users where name = 'Robin'
union all
Select id, name from users where name = 'Carl'
union all
Select id, name from users where name = 'Sarah'
在我的实际情况下,我需要单独的查询,因此 in ('Steve', 'Pat')
或类似的解决方案将不起作用。
希望您明白我在寻找什么,如果您有任何问题,请提问。我正在使用 postgres v.10
这应该会如您所愿。
DO $$
DECLARE
var_req TEXT;
rec_key record;
cur_key CURSOR FOR SELECT distinct name from users;
BEGIN
open cur_key;
loop
fetch cur_key into rec_key;
EXIT WHEN NOT FOUND;
var_req := '
insert into your_output_table
select id, name from users
where name = '''||rec_key.name||'''
;
';
execute var_req;
end loop;
close cur_key;
END $$;
我不知道如何轻松解释我需要做什么,但我会尝试。
假设我有一个用户 table 和 5 个用户。
id name
1 Steve
2 Pat
3 Robin
4 Carl
5 Sarah
而不是只做一个 select * from users
我需要做这个不同的和更困难的。
我需要构建一个查询,为用户 table 中的每一行运行一个带有参数(名称)的查询,然后给我与 select * from users
我知道这听起来很奇怪,但这是我真正需要做的..
所以我想要发生的是:
我需要遍历用户 table 以找出有多少行。 (5) -这就是我要执行查询的次数。
每次执行查询时,我都需要更改 where 子句中的名称。第一次执行 = Steve,第二次执行 = Pat 等等。
最后我只想要一个输出,所以我需要合并结果。
如果我手动执行此操作,它将如下所示:
Select id, name from users where name = 'Steve'
union all
Select id, name from users where name = 'Pat'
union all
Select id, name from users where name = 'Robin'
union all
Select id, name from users where name = 'Carl'
union all
Select id, name from users where name = 'Sarah'
在我的实际情况下,我需要单独的查询,因此 in ('Steve', 'Pat')
或类似的解决方案将不起作用。
希望您明白我在寻找什么,如果您有任何问题,请提问。我正在使用 postgres v.10
这应该会如您所愿。
DO $$
DECLARE
var_req TEXT;
rec_key record;
cur_key CURSOR FOR SELECT distinct name from users;
BEGIN
open cur_key;
loop
fetch cur_key into rec_key;
EXIT WHEN NOT FOUND;
var_req := '
insert into your_output_table
select id, name from users
where name = '''||rec_key.name||'''
;
';
execute var_req;
end loop;
close cur_key;
END $$;