sql - oracle 子查询与 order by 不工作
问题描述
当我运行以下查询时:
select
(
select t.person_uid
from table1 t
where t.CELL_PH_NUM = table2.CELL_PH_NUM
and rownum<2
order by t.created desc
)
from temp table2 ;
...Oracle 返回以下错误:
ORA-00907: 缺少右括号
我不明白错误在哪里:
- 如果我删除
order by
,则不返回错误并且正确执行查询(但不返回我需要的内容) - 如果我独立运行子查询(替换
table2.CELL_PH_NUM
为固定值),则不返回错误并且正确返回查询(但不返回我需要的内容)
错误在哪里?
解决方案
您的查询实际上并没有做您想要的,因为where
在order by
. 因此,您不一定会获得最新的行。
不幸的是,Oracle 不允许您使用其他级别的子查询,因为相关子句不起作用。但是有一个解决方案:
select (select max(t.person_uid) keep (dense_rank first order by t.created desc)
from table1 t
where table1.CELL_PH_NUM = table2.CELL_PH_NUM
)
from temp table2 ;
在您的问题中的查询版本中,table1
未定义。这可能与您遇到的错误有关。
推荐阅读
- list - 接收错误:实际参数列表和形式参数列表的长度不同
- flutter - 颤振时间计算
- javascript - 如何获取嵌入式 Excel 电子表格的文件令牌?
- macos - 在 macOS 上构建 FLTK 时,“'_Nonnull' 不能应用于非指针类型”?
- php - 从服务器远程连接到另一台不同服务器的数据库
- ethereum - 以太坊钱包显示它有以太币,但 geth 没有显示余额
- java - 保存列表的大小而不更新它
- php - 用 PHP 解析 Wikipedia API
- android - Transformations.map LiveData
- python - 我的简单 if ... elif ... 语句有什么问题