[英]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.