【发布时间】:2021-01-11 14:34:55
【问题描述】:
我正在尝试基于 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 以确保完整性。
【问题讨论】:
-
您可以单独运行查询吗? (即没有 CREATE VIEW 部分。)
-
是的,它可以独立运行并返回预期的数据。
标签: sql intellij-idea hsqldb