繁体   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