我有一个返回单个值的存储过程。我想执行一个 SELECT 查询,既选择存储过程的返回值,又在 WHERE 子句中使用该值。
我试过这样做:
SELECT u.name, myproc(u.id) as p FROM users WHERE p = 'something';
但是那行不通,至少在 PostgreSQL 上行不通。我收到错误:错误:“p”列不存在
我能让它工作的唯一方法是调用该过程两次,例如
SELECT u.name, myproc(u.id) FROM users WHERE myproc(u.id) = 'something';
但是调用函数两次似乎很浪费,也没有必要。有什么方法可以在不调用函数两次的情况下做到这一点?
最佳答案
您可以使用公用表表达式(或子查询);
WITH cte AS (
SELECT u.name, myproc(u.id) as p
FROM users u
)
SELECT * FROM cte WHERE p = 'something'
基本上,公用表表达式的工作方式类似于子查询,您执行 SELECT 并为结果命名,然后您可以从结果中进行选择,就好像它是一个表一样。
关于sql - 在 select 和 where 子句中使用存储过程返回值,而不必调用它两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064045/