LINUX.ORG.RU

SQL: использование переменных, определенных через AS в условии WHERE


0

1

Запрос типа: SELECT x, weight AS (SELECT COUNT(...)) FROM table_name WHERE weight>0;

Возвращает: ERROR: column «weight» does not exist LINE 1: ...FROM table_name WHERE weight>0

при этом SELECT x, weight AS (SELECT COUNT(...)) FROM table_name ORDER BY weight;

работает нормально. Т.е. условие WHERE хочет именно колонку таблицы в качестве левого параметра условия, а не промежуточное вычисленное значение, хотя для сортировки оно его берет без проблем. Можно как-нибудь это обойти прямо в запросе без пост-фильтрации резалт-сета? База postgres.

★★★★★

Условие в WHERE обрабатывается до того, как вычисляются значения в SELECT A,B,.. ORDER BY применяется уже к «посчитанным» значениям полей. Т.е. никаких промежуточных значений для weight нет, есть только конечные которые в WHERE не видны. Выводы делайте сами

mashina ★★★★★
()
Ответ на: комментарий от anonymous

спасибо, оно. правда определенные переменные он все равно не хочет использовать - приходится вводить подзапрос два раза.

bender ★★★★★
() автор топика
Ответ на: комментарий от guilder

да - в моем оригинале так и есть, просто опечатался когда набирал упрощенную версию

bender ★★★★★
() автор топика
Ответ на: комментарий от bender

Теоретически, оптимизатор этое дело должен оптимизировать...

Смоляное Чучелко

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.