2015-02-11 24 views
-5

我在我的應用程序中使用了mysql數據庫,但我想遷移到Oracle。如何在Oracle中按行ID選擇一行?

的問題是在該查詢:

select * from users limit ?,1;" 

該查詢由一個根據返回的每行一個?

我怎麼能在oracle中做到這一點?

+0

據我所知Oracle有沒有限制有偏差。 – Jens 2015-02-11 08:12:53

+0

較新的Oracle版本有OFFSET/FETCH FIRST! – jarlh 2015-02-11 08:13:40

+0

在MySQL中是可以的,但我不知道我是否可以像LIMIT那樣在MySQL中收到一行。 – David 2015-02-11 08:14:50

回答

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; 
+0

謝謝。這是工作。 – David 2015-02-11 08:36:27

+0

這將給你任意的行。 – 2015-02-11 08:37:46

2

在甲骨文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

根據您的要求,您還可以使用分析功能ROW_NUMBER, RANK, DENSE_RANK