SELECT
CASE
WHEN data.DISPLAY_NAME LIKE '%xyz 850 G7%'
THEN CONCAT(data.DISPLAY_NAME, ' Notebook PC')
ELSE data.DISPLAY_NAME
END as u_display_name,
data.ASSET_TAG AS "u_asset_tag",
FROM
VW_ALM_ASSET data
LEFT OUTER JOIN
(SELECT
ASSET_TAG,
CASE
WHEN data.u_display_name LIKE '%xyz%'
THEN SUBSTR(REPLACE(data.u_display_name, '(test) ', ''), 17)
FROM
VW_ALM_ASSET
WHERE
data.u_display_name IS NOT NULL) data1 ON data1.ASSET_TAG = data.ASSET_TAG
我得到一个错误:
ORA-00904:“data.u_display_name”:无效标识符
00904. 00000 -“%s:无效标识符”
- 原因:
- 行动:
行错误:46柱:12
我想使用别名u_display_name
,因为它正在使用CONCAT
进行更新。我想在连接表中使用其更新的值来创建模型列,但它显示“无效标识符”错误。
我尝试在连接表中使用data.u_display_name
和u_display_name
标识符。
如何在连接表中使用u_display_name
的当前更新值?
2条答案
按热度按时间3j86kqsm1#
使用子查询和
LATERAL
连接:但是,你可能不需要
JOIN
,因为你要将表连接到它本身,而可能需要一个嵌套的子查询:a14dhokn2#
参见1.6在SQL Cookbook第2版的WHERE子句中引用别名列:
问题
您已经使用别名为结果集提供了更有意义的列名,并且希望使用WHERE子句排除某些行。但是,在WHERE子句中引用别名的尝试失败:
解决方案
通过将查询 Package 为内联视图,可以引用带别名的列: