当我单独运行以下sql查询时,我得到一个三字母值的正确结果
(select substr((select code from (select qq.id, qq.code from contacts qq where qq.code like 'FB%' and qq.ref_no = 3359245 order by id desc ) where rownum=1),3,6) from dual)
但是当我以下列方式运行相同的查询时,
select ce.ref_no,
(select substr((select code from (select qq.id, qq.code from contacts qq where qq.code like 'FB%' and qq.ref_no = ce.ref_no order by id desc ) where rownum=1),3,6) from dual) "FEEDBACK"
from contacts ce
where ce.ref_no = 3359245;
我收到以下错误
ORA-00904: "CE"."REF_NO": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 62 Column: 137
我的数据集如下:
14494895 FBBOM
14494896 FBDEL
14494897 FBBOM
14494898 FBDEL
14494902 FBDEL
14494903 FBDEL
我想从14494903获得FBDEL
答案 0 :(得分:1)
使用相关子查询时,Oracle对如何使用相关子查询进行了限制。它识别外部查询。它只能降低一级。
关联条件有两个级别,因此编译器无法识别外部别名。
我认为您可以使用分析功能更轻松地完成您想要的任务。我想这就是你想要的:
select ce.ref_no,
substr(max(code) keep (dense_rank first order by (case when code like 'FB%' then 1 else 0 end) desc,
id desc
), 3, 6)
from contacts ce
where ce.ref_no = 3359245
group by ce.ref_no;
这假设存在FB
记录,因此在其他情况下可能会返回错误的内容。 (您可以使用其他逻辑来检查。)
答案 1 :(得分:0)
这是因为内部查询
不显示Contacts表,因此别名ce