#postgresql
Вопрос:
У меня есть этот запрос, который я написал в PostgreSQL, который возвращает сообщение об ошибке:
[Ошибка] ОШИБКА:
СТРОКА 3: ОТ (ВЫБЕРИТЕ ОТДЕЛЬНЫЙ (идентифицирующий) КАК made_only_recharge
Вот и весь запрос:
SELECT COUNT (made_only_recharge) AS made_only_recharge
FROM (
SELECT DISTINCT (identifiant) AS made_only_recharge
FROM cdr_data
WHERE CALLEDNUMBER = '0130'
EXCEPT
SELECT DISTINCT (identifiant) AS made_only_recharge
FROM cdr_data
WHERE CALLEDNUMBER != '0130'
)
У меня есть аналогичный запрос в Oracle, который отлично работает. Единственное изменение заключается в том, что EXCEPT
в Oracle я заменил его MINUS
ключевым словом. Я новичок в Postgres и не знаю, о чем он просит. Как правильно с этим справиться?
Комментарии:
1. Мне кажется, что исключение не нужно, так как первое предложение where уже исключает его:
CALLEDNUMBER = '0130'
.2. Эта ошибка все еще происходит с Postgres 11 FWIW…
Ответ №1:
Добавьте ALIAS
в подзапрос,
SELECT COUNT(made_only_recharge) AS made_only_recharge
FROM
(
SELECT DISTINCT (identifiant) AS made_only_recharge
FROM cdr_data
WHERE CALLEDNUMBER = '0130'
EXCEPT
SELECT DISTINCT (identifiant) AS made_only_recharge
FROM cdr_data
WHERE CALLEDNUMBER != '0130'
) AS derivedTable -- <<== HERE
Комментарии:
1. @JohnWoo спасибо за это, но зачем это нужно (наверное, я задаю здесь теоретический вопрос)?
2. @AndrewCassidy Вы должны определить, чтобы вы могли добавить дополнительные ограничения в свой запрос (ГДЕ выводится). <атрибут> = 5). в противном случае ваша база данных не будет знать, как ссылаться на подзапрос
3. @AndrewCassidy Это просто неудачный синтаксис. До тех пор, пока вы не ссылаетесь на этот подзапрос, не имеет значения, какой у него псевдоним. Лично я использую
AS pg_sucks
, что означает «ну , здесь у вас есть какой-то избыточный идентификатор, но вы могли бы сгенерировать его самостоятельно, черт возьми, postgres!» 🙂4. @Tregoreg Мои псевдонимы всегда содержат какое-то ругательство с тем же эффектом.
Ответ №2:
В случае вложенных таблиц некоторые СУБД требуют использования псевдонимов, таких как MySQL и Oracle, но другие не имеют такого строгого требования, но все же позволяют добавлять их для замены результата внутреннего запроса.
Комментарии:
1. Ваша формулировка предполагает, что такое требование существует как для Oracle, так и для MySQL. Я правильно все понял?
2. @Scratte Я думаю, что вы правы, и формулировка изменилась. «MySQL и Oracle, но другие» должны быть «Postgresql, но другие, такие как MySQL и Oracle», я думаю. Конечно, это все еще продолжительное предложение, и его можно было бы еще улучшить. Ответ 2013 года в порядке, и этот ответ ничего не добавляет (прокомментируйте ответ 2013 года, если необходимо), поэтому последний следует удалить.
3. mysql действительно требует псевдонимов