简单直接的回答是:不能把视图建立在 Temporary Table(临时表)上,至少在主流关系型数据库中通常不行。
下面分数据库说明一下:
不支持在临时表上创建视图。
CREATE TEMPORARY TABLE tmp_t (id INT);
CREATE VIEW v_tmp AS SELECT * FROM tmp_t;
-- ERROR: 视图不能引用临时表
原因:视图是存储在数据字典中的对象,而临时表只存在于当前会话,生命周期不一致。
也不支持对临时表建普通视图。
不过 PostgreSQL 支持 临时视图(TEMPORARY VIEW):
CREATE TEMPORARY TABLE tmp_t (id INT);
CREATE TEMPORARY VIEW v_tmp AS SELECT * FROM tmp_t;
✅ 这是“临时视图 + 临时表”的组合,只在当前会话可见。
不能在 #temp 表上创建普通视图。
但可以使用:
CREATE VIEW v_tmp AS SELECT * FROM #tmp;
-- 不支持
Oracle 的临时表是 GLOBAL TEMPORARY TABLE,结构是全局的,数据是会话级的。
✅ 可以基于全局临时表创建视图
CREATE GLOBAL TEMPORARY TABLE tmp_t (id NUMBER) ON COMMIT DELETE ROWS;
CREATE VIEW v_tmp AS SELECT * FROM tmp_t;
这是 Oracle 的一个特例。
| 数据库 | 能否在临时表上建视图 |
|---|---|
| MySQL | ❌ 不能 |
| PostgreSQL | ❌(但可建临时视图) |
| SQL Server | ❌ 不能 |
| Oracle | ✅ 可以(全局临时表) |
如果你能告诉我用的是哪种数据库,我可以给你更合适的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。