You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL创建视图时如何使用SELECT中新生成的列计算其他列

正确创建wwn视图的实现方案

你报错的核心原因是创建视图的语句中循环引用了还未创建的wwn视图本身,不需要额外创建临时视图,直接将结束时间的计算逻辑放到表关联条件中即可,正确实现如下:

-- 适配PostgreSQL等支持OVERLAPS语法的数据库
CREATE VIEW wwn AS
SELECT 
  t1.ID,
  t1.Time_of_start,
  (t1.Time_of_start + t1.Duration * INTERVAL '1 minute') AS Time_of_end,
  t1.Duration,
  t2.Name
FROM table1 t1
LEFT JOIN table2 t2
  ON (t2.time_of_login, t2.time_of_logout) OVERLAPS (t1.Time_of_start, t1.Time_of_start + t1.Duration * INTERVAL '1 minute')
WHERE t1.ID = 300;

上述语句直接在关联table2时,通过table1的原生字段实时计算事件结束时间,再用overlaps判断和用户登录时段是否重叠,完全避开了引用未创建视图的问题。针对你提供的示例数据,执行后返回的视图结果和你的预期完全一致。

如果使用的数据库不支持OVERLAPS语法或者时间计算写法不同,可以替换为通用的时段判断逻辑,比如MySQL版本写法:

CREATE VIEW wwn AS
SELECT 
  t1.ID,
  t1.Time_of_start,
  DATE_ADD(t1.Time_of_start, INTERVAL t1.Duration MINUTE) AS Time_of_end,
  t1.Duration,
  t2.Name
FROM table1 t1
LEFT JOIN table2 t2
  ON t2.time_of_login < DATE_ADD(t1.Time_of_start, INTERVAL t1.Duration MINUTE)
  AND t2.time_of_logout > t1.Time_of_start
WHERE t1.ID = 300;

内容的提问来源于stack exchange,提问作者SL07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:48:02