我在我的應用程序中使用了mysql數據庫,但我想遷移到Oracle。如何在Oracle中按行ID選擇一行?
的問題是在該查詢:
select * from users limit ?,1;"
該查詢由一個根據返回的每行一個?
我怎麼能在oracle中做到這一點?
我在我的應用程序中使用了mysql數據庫,但我想遷移到Oracle。如何在Oracle中按行ID選擇一行?
的問題是在該查詢:
select * from users limit ?,1;"
該查詢由一個根據返回的每行一個?
我怎麼能在oracle中做到這一點?
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;
謝謝。這是工作。 – David 2015-02-11 08:36:27
這將給你任意的行。 – 2015-02-11 08:37:46
在甲骨文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
。
據我所知Oracle有沒有限制有偏差。 – Jens 2015-02-11 08:12:53
較新的Oracle版本有OFFSET/FETCH FIRST! – jarlh 2015-02-11 08:13:40
在MySQL中是可以的,但我不知道我是否可以像LIMIT那樣在MySQL中收到一行。 – David 2015-02-11 08:14:50