Код для создания CTE возвращает пустую / пустую таблицу - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь создать CTE для дальнейшего использования в моем файле SQL. Я работаю из DBeaver с использованием Postgres. Это таблица, которую я пытаюсь назвать 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 "не существует."Я не уверен, является ли это очевидной синтаксической ошибкой, которую я пропускаю, или странной причудой, связанной с базой данных, которую я использую? Спасибо!

1 Ответ

0 голосов
/ 08 ноября 2019

Из исходного опубликованного вопроса в вашем 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)
...