Sql 创建CTE返回空/空表的代码
我正试图在我的SQL文件中创建一个CTE以供将来参考。我正在使用Postgres使用DBeaver。这是我试图作为CTE参考的表格:Sql 创建CTE返回空/空表的代码,sql,postgresql,dbeaver,Sql,Postgresql,Dbeaver,我正试图在我的SQL文件中创建一个CTE以供将来参考。我正在使用Postgres使用DBeaver。这是我试图作为CTE参考的表格: SELECT userID, MIN(eDate) as levUpDate FROM e_live WHERE eName= 'missCom' and puzzleNumber = '100' GROUP BY userID 当我单独运行这段代码时,它会生成一个普通表。但是,当我尝试从中创建CTE时,不会创建任何表: WITH tbl AS (SELECT
SELECT userID, MIN(eDate) as levUpDate
FROM e_live
WHERE eName= 'missCom'
and puzzleNumber = '100'
GROUP BY userID
当我单独运行这段代码时,它会生成一个普通表。但是,当我尝试从中创建CTE时,不会创建任何表:
WITH tbl AS
(SELECT userID, MIN(eDate) as levUpDate
FROM e_live
WHERE eName= 'missCom'
and puzzleNumber = '100'
GROUP BY userID)
如果我以后尝试引用tbl,我会得到以下错误:“错误:关系“tbl”不存在。”我不确定这是我缺少的一个明显的语法错误,还是与我使用的数据库有关的一个奇怪的怪癖?谢谢 从最初发布的问题中,您的CTE在末尾缺少一个子句。基本上,您定义CTE,但不从中进行选择。CTE
tbl
不会被持久化,因此您不能SELECT*FROM tbl
以后:
edb=# create table e_live (userID int, eDate timestamp, eName text, puzzleNumber int);
CREATE TABLE
edb=# insert into e_live values (1,now(),'missCom',100);
INSERT 0 1
edb=# WITH tbl AS
(SELECT userID, MIN(eDate) as levUpDate
FROM e_live
WHERE eName= 'missCom'
and puzzleNumber = '100'
GROUP BY userID) select * from tbl;
userid | levupdate
--------+---------------------------
1 | 08-NOV-19 06:52:53.588546
(1 row)
edb=# select * from tbl;
ERROR: relation "tbl" does not exist
LINE 1: select * from tbl;
^
edb=#
如果希望存储结果以供以后参考,可以创建一个视图:
edb=# CREATE OR REPLACE VIEW tbl AS SELECT userID, MIN(eDate) as levUpDate
FROM e_live
WHERE eName= 'missCom'
and puzzleNumber = '100'
GROUP BY userID;
CREATE VIEW
edb=# select * from tbl;
userid | levupdate
--------+---------------------------
1 | 08-NOV-19 06:52:53.588546
(1 row)
不能创建CTE以供将来参考。此
WITH…
子句始终是选择
、更新
或插入
语句的一部分。阅读更多信息如果您想保留定义,您可能实际上需要一个视图
。请尝试将视图tbl创建为SELECT userID,@klin我不确定这是否是答案-问题中没有足够的信息可以确定。这就是我为什么要发表评论的原因……对不起,应该包含更多信息,这就是我稍后引用的意思:SELECT*FROM tbl JOIN user\u metrics on tbl.userID=user\u metrics.user\u id
这是我代码的第二部分。我们将尝试此解决方案-谢谢!即使我使用CREATE视图而不是使用运行此代码,然后运行代码的第二部分,不幸的是,我也会遇到相同的错误。