Используйте номер столбца из предложения select в предложении where.Извлечение псевдонимов оригинального имени - PullRequest
7 голосов
/ 26 марта 2012

Допустим, у меня есть запрос, подобный этому

    SELECT a as d,b,c FROM myTable
    WHERE a=1;

Возможно ли вместо a = 1 напечатать что-то вроде SELECTED.1 = 1 или каким-то образом извлечь исходное имя псевдонима, так как d = 1 не делаетне работает

Ответы [ 2 ]

10 голосов
/ 26 марта 2012

Это невозможно сделать из-за внутренних сложностей, связанных с оценкой предложения WHERE. Но если то, что вы называете псевдонимом, является длинным выражением, которое вы не хотели бы повторять, есть типичное решение для этого. От https://forums.oracle.com/forums/thread.jspa?threadID=1107532:

Стандартным решением для этого является перемещение запроса во встроенный представление (без предиката where-условия), а затем добавьте предикат where-clause с использованием псевдонима во внешнем запросе.

Так что-то вроде этого:

select ...
from (select ... here complex expression that is aliased ...
      from ...
      where ) A
where ... here condition that uses the A.alias column ...

В вашем примере это будет:

SELECT d, b, c
FROM ( SELECT a AS d, b, c FROM myTable ) AS myAliasedTable
WHERE d = 1

Но, конечно, это не имеет смысла в вашем буквальном примере. Если то, что вы называете псевдонимом, является просто именем столбца, то просто используйте фактическое имя столбца в WHERE, в этом случае реального недостатка нет.

Также обратите внимание, что если вы используете этот метод, вы должны поместить как можно большую часть предложения WHERE во внутренний запрос (то есть части, которые не ссылаются на столбец с псевдонимом), чтобы ограничить размер получаемого псевдонима. Таблица. Например, если вы также хотите протестировать b в вашем примере, это будет:

SELECT d, b, c
FROM (
    SELECT a AS d, b, c
    FROM myTable
    WHERE b = 1
) AS myAliasedTable
WHERE d = 1
3 голосов
/ 26 марта 2012

Используйте общее табличное выражение (CTE) например

WITH T 
     AS 
     (
      SELECT a as d, b, c 
        FROM myTable
     )
SELECT * 
  FROM T
 WHERE d = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...