Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建CTE返回空/空表的代码_Sql_Postgresql_Dbeaver - Fatal编程技术网

Sql 创建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

我正试图在我的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 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视图而不是使用运行此代码,然后运行代码的第二部分,不幸的是,我也会遇到相同的错误。