如何在PostgreSQL中声明和使用变量?

How to declare and use a variable in PostgreSQL?

提问人:NZJL 提问时间:12/27/2022 最后编辑:MureinikNZJL 更新时间:12/27/2022 访问量:1420

问:

我是PostgreSQL的新手,所以也许我的问题不被说服。但我想要的是将一个查询的结果放入一个变量中,然后在另一个查询中再次使用它。我在 pgAdmin4 中运行我的查询,以下是我的查询:

我也尝试了那些解决方案1解决方案2,但没有实现我的目标。

WITH vars AS (
    (select count(*) from employee) AS vars_id
)
select 
    *
from 
    employee
where
    id=vars.vars_id;

错误是:

ERROR:  syntax error at or near "AS"
LINE 2:  (select count(*) from employee) AS vars_id
                                         ^
SQL state: 42601
Character: 49
SQL PostgreSQL 选择 语法错误

评论

1赞 Lukasz Szozda 12/27/2022
where id=vars.vars_id; => where id = (SELECT vars.vars_id FROM vars);
2赞 Bergi 12/27/2022
vars是一个表,而不是单个记录。纯 SQL 中没有这样的变量。
0赞 NZJL 12/27/2022
我更新了我的问题,它给了我这个错误。

答:

2赞 Mureinik 12/27/2022 #1

CTE 的结果是表表达式。你不能只把它称为标量,你需要从中查询:

WITH vars AS (
    SELECT COUNT(*) AS vars_id FROM employee
)
SELECT *
FROM   employee e
JOIN   vars ON e.id = vars.vars_id

评论

0赞 NZJL 12/27/2022
我实施了你的解决方案,它给了我和我一样的错误。
0赞 Mureinik 12/27/2022
@NZJL哦,这个条款放错了地方。什至没有注意到这一点,我是罪魁祸首。请参阅我编辑的答案。as
0赞 Peter Uzek 11/29/2023 #2

是否可以在多个查询中使用这些变量? 例如

WITH vars (user_id) as (
   values (5)
)
delete from orders where user_id = vars.user_id;
delete from user_setting where user_id = vars.user_id;
delete from documents where user_id = vars.user_id;