sql - 在 CREATE VIEW 内的 WITH...AS 中使用多个表表达式时出现“找不到对象”错误
问题描述
我正在尝试基于 HSQLDB(版本 2.5.1)中的复杂查询创建视图。
查询看起来像这样(为清楚起见进行了简化),还包括表的 DDL:
DROP VIEW TEST_VIEW IF EXISTS;
DROP TABLE TEST_1 IF EXISTS;
CREATE TABLE TEST_1 (
contentid VARCHAR(10),
contenttype VARCHAR(10),
downloaddate TIMESTAMP
);
DROP TABLE TEST_2 IF EXISTS;
CREATE TABLE TEST_2 (
dbid INTEGER,
contentid VARCHAR(10),
version VARCHAR(10)
);
CREATE VIEW TEST_VIEW AS
WITH a AS (
SELECT CONTENTID, count(*) AS amount
FROM TEST_2
GROUP BY CONTENTID
),
b AS (
SELECT CONTENTID, amount
FROM a
)
SELECT b.CONTENTID, b.amount, i.DOWNLOADDATE
FROM b /* error here */
JOIN TEST_1 i ON i.CONTENTID = b.CONTENTID
ORDER BY b.CONTENTID;
但是,它失败并出现以下错误:
[42501][-5501] 用户缺少权限或找不到对象:在语句 [CREATE VIEW TEST_VIEW AS......
当用作SELECT
(不带CREATE VIEW...AS
)时,相同的查询运行良好。
此外,如果语句中只有一个表表达式,则视图创建成功WITH...AS
,如下所示:
CREATE VIEW TEST_VIEW AS
WITH a AS (
SELECT CONTENTID, count(*) AS amount
FROM TEST_2
GROUP BY CONTENTID
)
SELECT a.CONTENTID, a.amount, i.DOWNLOADDATE
FROM a
JOIN TEST_1 i ON i.CONTENTID = a.CONTENTID
ORDER BY a.CONTENTID;
看起来在第一条语句中,数据库引擎尝试将“JOIN”解析为表“b”的表别名。
是否有我没有注意到的语法错误,或者 HSQLDB 不支持WITH...AS
内部的多个表表达式CREATE VIEW
?
编辑:更新示例查询以包含表 DDL 以确保完整性。
解决方案
HSQLDB 支持创建这种类型的视图。
由于您没有提供表定义,我尝试对 DatabaseManager 生成的测试表进行类似查询,结果成功。请报告表格。
CREATE VIEW REPORT_LINKED_IDS AS
WITH a AS (
SELECT PRODUCTID, count(*) AS amount
FROM ITEM
GROUP BY PRODUCTID
),
b AS (
SELECT PRODUCTID, amount
FROM a
)
SELECT b.PRODUCTID, b.amount, i.NAME, i.PRICE
FROM b
JOIN PRODUCT i ON i.ID = b.PRODUCTID
ORDER BY b.PRODUCTID;
推荐阅读
- reactjs - 我的 Axios 的动态 API 路径似乎没有正确形成
- powershell - AutoIt 复选框按钮单击
- python - 使用python检查文件中的名称是否匹配
- c++ - 编写将唯一指针推入向量的函数时出错
- node.js - Bitstamp 认证 API hmac
- kubernetes - 即使成功启用 Bolt,也无法建立与 Neo4j 使用螺栓方案的连接
- sharepoint - 如何禁用/隐藏将新文件上传到文档集后弹出的编辑表单(SP 2016)
- javascript - 如何在我在 javascript 中使用 DOM 创建的元素中使用 InnerHTML 添加内容
- c++ - 文件系统:错误无法删除:输入/输出错误
- java - MyBatis: IllegalArgumentException: Mapped Statements 集合不包含值