DB2 sql запрашивает псевдоним в предложении where - PullRequest
0 голосов
/ 15 мая 2019

Есть ли способ, с помощью которого мы могли бы запрашивать псевдонимы

SELECT 
   'X' AS AVC
 FROM 
   sysibm.sysdummy1
 WHERE AVC= 'X'

Я просто ищу способ, я мог бы запросить столбец псевдонимов.

Я получаю приведенную ниже ошибку.

Error: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=AVC, 
DRIVER=3.63.75
SQLState:  42703
ErrorCode: -206
Error: DB2 SQL Error: SQLCODE=-514, SQLSTATE=26501, SQLERRMC=SQL_CURLH200C1, 
DRIVER=3.63.75
SQLState:  26501
ErrorCode: -514

Любой вклад будет полезен!

Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 мая 2019

Вы не можете. Это общее правило SQL. На практике вы можете подумать о том, что where анализируется перед select, поэтому псевдонимы неизвестны.

Общее решение - использовать подзапрос или CTE:

SELECT t.*
FROM (SELECT 'X' AS AVC
      FROM sysibm.sysdummy1
     ) t
WHERE AVC = 'X';

Мое предпочтительное решение - использовать боковое соединение, но я не думаю, что DB2 поддерживает либо APPLY, либо LATERAL.

0 голосов
/ 16 мая 2019

Механизм не знает псевдонимов таблиц или столбцов, пока не завершит сбор данных. Вы можете использовать их в операторе ORDER BY в том же запросе, но это все. Однако вы можете использовать Common Table Expression, также известный как CTE:

WITH myCTE AS (
SELECT 'X' AS AVC
 FROM sysibm.sysdummy1
)
SELECT *
  FROM myCTE
    WHERE AVC= 'X'

Это довольно долгий путь, но, к сожалению, это так.

0 голосов
/ 15 мая 2019

вы не можете использовать псевдоним в условии where, потому что механизм sql проверяет предложение запроса (FROM, WHERE, SELECT ...) в определенном порядке, а предложение select вычисляется после предложения where

Таким образом, в момент оценки где псевдоним столбца не известен по модулю БД

Вы должны повторить код

SELECT 'X' AS AVC
FROM  sysibm.sysdummy1
WHERE X' = 'X' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...