我在我的应用程序中使用了mysql数据库,但我想迁移到Oracle。
问题在于该查询:
select * from users limit ?,1;"
该查询逐个返回每一行,具体取决于?。
我怎样才能在oracle中做到这一点?
答案 0 :(得分:2)
在Oracle 12c上,您可以使用 FETCH FIRST 子句使用行限制功能。
SQL> SELECT empno, sal, deptno FROM emp ORDER BY empno DESC
2 FETCH FIRST 1 ROWS ONLY;
EMPNO SAL DEPTNO
---------- ---------- ----------
7934 1300 10
SQL>
之前的12c解决方案是 ROWNUM ,但是,如果您希望首先对行进行排序,那么您需要在子查询中执行此操作 -
SQL> SELECT empno, sal, deptno FROM
2 ( SELECT * FROM emp ORDER BY empno DESC
3 ) WHERE ROWNUM = 1;
EMPNO SAL DEPTNO
---------- ---------- ----------
7934 1300 10
SQL>
如果订单对您不重要,如果您只想要任意随机行,只需使用 ROWNUM 。
根据您的要求,您还可以使用 ANALYTIC功能,例如ROW_NUMBER, RANK, DENSE_RANK
。
答案 1 :(得分:1)
select * from (select rownum r, u.* from users u ) where r=1;
或者如果你想要它排序(用columnnumber或columnname替换x):
select * from (select rownum r, u.* from users u order by x) where r=1;