Given;OracleのNTH行のクエリが予期したとおりに動作しない
CREATE TABLE T1 (ID INTEGER, DESCRIPTION VARCHAR2(20));
INSERT INTO T1 VALUES (1,'ONE');
INSERT INTO T1 VALUES (2,'TWO');
INSERT INTO T1 VALUES (3,'THREE');
INSERT INTO T1 VALUES (4,'FOUR');
INSERT INTO T1 VALUES (5,'FIVE');
COMMIT;
なぜですか。
SELECT * FROM
(SELECT ROWNUM, ID, DESCRIPTION
FROM T1)
WHERE MOD(ROWNUM,1)=0;
戻り
ROWNUM ID DESCRIPTION
------ -------------------------------------- --------------------
1 1 ONE
2 2 TWO
3 3 THREE
4 4 FOUR
5 5 FIVE
のに対し、
SELECT * FROM
(SELECT ROWNUM, ID, DESCRIPTION
FROM T1)
WHERE MOD(ROWNUM,2)=0;
ゼロの行を返しますか?
混乱は、ROWNUM =(2,4)が返されることが期待...
別名ROWNUMおよび FROM句が動作するはず... – xQbert
SELECT *にエイリアスを参照 MOD(t.rn 2 Tと(RN、ID、T1 FROM DESCRIPTION としてROWNUMを選択) )= 0; –
'ROWNUM'は、行が' WHERE'節によってフィルタリングされた後に割り当てられます。したがって、 'ROWNUM' 1を削除するフィルタは、行が返されないようにします。同様に、「ROWNUM」2をフィルタリングする任意のクエリは、ロー1が返されることを防ぐ。 'WHERE MOD(ROWNUM、5)<= 3'は、テーブルにいくつの行が存在するかにかかわらず最初の3行だけを返し、' WHERE ROWNUM <= 3'述語に相当します。 – Sentinel