oracle子查询与不工作的顺序

时间:2018-04-26 20:14:57

标签: sql oracle

当我运行以下查询时:

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),则不会返回错误并且正确返回查询(但不会返回我需要的内容)
  3. 错误在哪里?

1 个答案:

答案 0 :(得分:3)

您的查询实际上并不是您想要的,因为y = [10, 20] z = [20, 30] 会在where之前应用。所以,你没必要得到最新的一行。

不幸的是,Oracle不允许您使用其他级别的子查询,因为相关条款不起作用。但有一个解决方案:

order by

在您问题中的查询版本中,未定义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 ; 。这可能与你得到的错误有关。