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
我有 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