有没有一种方法可以使用别名进行查询
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
任何输入都会有所帮助!
谢谢!
答案 0 :(得分:0)
您不能在where条件中使用别名,因为sql引擎按特定顺序对查询子句(FROM,WHERE,SELECT ...)进行评估,而select子句在where子句之后进行评估
因此,在当前数据库引擎不知道列别名的位置
您必须重复代码
SELECT 'X' AS AVC
FROM sysibm.sysdummy1
WHERE X' = 'X'
答案 1 :(得分:0)
不能。这是SQL的一般规则。实际上,您可以认为原因是where
在select
之前被解析,因此别名是未知的。
一般的解决方案是使用子查询或CTE:
SELECT t.*
FROM (SELECT 'X' AS AVC
FROM sysibm.sysdummy1
) t
WHERE AVC = 'X';
我的首选解决方案是使用横向联接,但我认为DB2不支持APPLY
或LATERAL
。
答案 2 :(得分:0)
直到完成数据收集,引擎才知道表别名或列别名。您可以在同一查询的ORDER BY
语句中使用它们,仅此而已。但是,您可以使用Common Table Expression
也称为CTE
:
WITH myCTE AS (
SELECT 'X' AS AVC
FROM sysibm.sysdummy1
)
SELECT *
FROM myCTE
WHERE AVC= 'X'
要做到这一点还有很长的路要走,但不幸的是。