Oracle 的内部查询不起作用?

Inner Query For Oracle is not working?

我有 2 个表 table1 和 table2。我想从两个表中获取数据。查询是

SELECT tb2.tdn
     ,tb2.nrn
     ,tb2.id
     ,tb2.dat
     ,tb2.mcheck
     ,tb2.info
     ,tb2.edrf
     , (SELECT count(*) 
        from table1 tb1
        where tb1.id = 'ftam' 
        and tb1.tdn =  tb2.tdn 
        and (tb1.display = 'Y' OR tb1.display = 'y') ) as history 
from (select rownum rnum 
             ,table2.* 
      FROM  (SELECT * 
             FROM table2 
             WHERE id = 'ftam' 
             and (display = 'Y' OR display = 'y') 
             ORDER BY dat DESC ) table2 tb2 
     where  rownum <= 50 )
WHERE rnum >  0 

正在显示

SQL Error [907] [42000]: ORA-00907: missing right parenthesis  
ORA-00907: missing right parenthesis

查询有什么问题?我已经在 MySQL 中实现了它,但是当我将查询更改为 Oracle 时它显示错误。

谢谢

为清楚起见,更改发布布局后发现这一行是最直接的问题:

ORDER BY dat DESC ) table2 tb2 

您需要一个别名,而不是两个。所以应该是

ORDER BY dat DESC )  table2 

您还需要为外部嵌套查询设置别名:

(select rownum rnum 
             ,table2.* 
      FROM  (SELECT * 
             FROM table2 
             WHERE id = 'ftam' 
             and (display = 'Y' OR display = 'y') 
             ORDER BY dat DESC ) table2
     where  rownum <= 50 ) tb2

您的查询需要大量改进,如果您告诉我们您想要做什么,我们也许可以帮助您构建查询。

你查询中的id是一个字符,最好是数字。您添加条件 ='y' 或 ='Y' ,您可以添加 lower/upper 功能。

这是解决您的查询的建议。

   select rownum rnum, table2.*
     FROM table2
   WHERE id = 'ftam'
   and lower(display) = 'Y' and rownum <= 50
   ORDER BY dat DESC