PostgreSQL: использование аббревиатуры подзапроса ('AS') в предложении WHERE - PullRequest
4 голосов
/ 27 января 2010

Рассмотрим следующий запрос в PostgreSQL:

SELECT 
    a, b, 
   (A VERY LONG AND COMPLICATED SUBQUERY) AS c,
   (ANOTHER VERY LONG AND COMPLICATED SUBQUERY) AS d
FROM table

Я хочу иметь c и d в предложении WHERE, например:

WHERE c AND d;

Но, насколько я знаю, я могу сделать только:

WHERE A VERY LONG AND COMPLICATED SUBQUERY) AND 
   (ANOTHER VERY LONG AND COMPLICATED SUBQUERY)

Что является неуклюжим, реплицирующим код, нарушающим принцип единого выбора и совершенно безобразным.

Кстати, та же проблема относится к предложению SELECT: я не могу использовать сокращения для ранее определенных подзапросов.

1 Ответ

13 голосов
/ 27 января 2010

Вы можете использовать подзапрос:

SELECT a,b,c,d FROM
    (SELECT 
        a, b, 
        (A VERY LONG AND COMPLICATED SUBQUERY) AS c,
        (ANOTHER VERY LONG AND COMPLICATED SUBQUERY) AS d
        FROM table
    ) AS T1
WHERE c AND d

Вы также можете сделать это с CTE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...