如何通过行ID在Oracle中只选择一行?

时间:2015-02-11 08:10:20

标签: oracle

我在我的应用程序中使用了mysql数据库,但我想迁移到Oracle。

问题在于该查询:

select * from users limit ?,1;" 

该查询逐个返回每一行,具体取决于?。

我怎样才能在oracle中做到这一点?

2 个答案:

答案 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;