首页 > 解决方案 > 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: 缺少右括号

我不明白错误在哪里:

  1. 如果我删除order by,则不返回错误并且正确执行查询(但不返回我需要的内容)
  2. 如果我独立运行子查询(替换table2.CELL_PH_NUM为固定值),则不返回错误并且正确返回查询(但不返回我需要的内容)

错误在哪里?

标签: sqloracle

解决方案


您的查询实际上并没有做您想要的,因为whereorder 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未定义。这可能与您遇到的错误有关。


推荐阅读