[英]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支持APPLY
或LATERAL
。
在完成數據收集之前,引擎不知道表或列別名。 您可以在同一查詢中的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.