sql - 在 select 和 where 子句中使用存储过程返回值,而不必调用它两次?

标签 sql postgresql stored-procedures

我有一个返回单个值的存储过程。我想执行一个 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/

相关文章:

python - 按百分比随机划分并存储 SQL 表

php - 显示基于另一行值的金额总和

postgresql - `gorm` 忽略 `sql:"索引 "` 标签

java - SqlDelight 不为 SQL 语句生成 SQL 查询字符串

postgresql - 如何使用动态 SQL 设置复合变量字段的值

c# - 为什么数据库会超时?

SQL Server + 为表中的每个 masterID 仅选择两条记录

hibernate - 在 Postgresql 中通过 hibernate 插入日期

sql - 使用 perl/SQL 将文件插入 Postgres bytea 列

sql - ORACLE-SQL : stored procedure using array as parameter for select