簡體   English   中英

DB2子句在where子句中查詢別名

[英]DB2 sql queries alias in where clause

有沒有辦法我們可以使用別名查詢

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

任何輸入都會有所幫助!

謝謝 !

你不能在where條件中使用別名,因為sql引擎按特定順序評估查詢子句(FROM,WHERE,SELECT ...),並在where子句之后評估select子句

所以在評估的時刻,列別名不是由數據庫引擎知道的

您必須重復該代碼

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

你不能。 這是SQL的一般規則。 在實踐中,您可以想到在select之前解析where的原因,因此別名是未知的。

一般的解決方案是使用子查詢或CTE:

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

我首選的解決方案是使用橫向連接,但我不認為DB2支持APPLYLATERAL

在完成數據收集之前,引擎不知道表或列別名。 您可以在同一查詢中的ORDER BY語句中使用它們,但就是這樣。 但是,您可以使用Common Table Expression也稱為CTE

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

這是一個很長的路要走但不幸的是就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM