sql - row_number - row num no muestra ninguna fila cuando se usa entre palabra clave
rownum oracle example (3)
Oracle rownum comienza en 1, por lo que nunca obtendrás el primer rownum si dices between 2 and N
Se necesita una fila para "iniciar" la secuencia de pseudocolum de rownum, por lo que al eliminar Rownum 1 en tus criterios, eliminas todos los rownums (o cada fila esencialmente tiene rownum 0
).
Míralo así. No obtiene un ROWNUM hasta que la base de datos le devuelva una fila. La primera fila de cualquier criterio siempre será ROWNUM 1.
Ahora, el truco que puede usar es usar una subconsulta. Cada subconsulta tendrá su propio rownum, y si lo alias a otro nombre de columna, puedes conservarlo en consultas externas y tratarlo como prefieras. Entonces, si está buscando implementar la paginación de un conjunto de resultados, normalmente alias rownum de los resultados internos como rownum_ a una subconsulta externa para limitar con BETWEEN.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Pero tenga en cuenta que el conjunto de resultados externo tendrá su propio Rownum, por lo que podría hacer:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Verás que rownum
en el resultado final aún comienza en 1, pero tu resultado interno tendrá rownum_
comenzando en 2.
Cuando estoy usando rownum y entre palabras clave, la consulta no devuelve ninguna fila. ¿Alguien puede explicar el motivo por el cual la consulta no está recuperando ninguna fila?
select * from cus where rownum between 2 and 6;
Solo quiero comprobar si Rownum funcionará cuando se use con la palabra clave. Así que, intenté con la consulta anterior para mostrar las filas que están entre 2 y 6. Pero cuando traté de ejecutar la consulta, no funciona. recuperar cualquier fila
gracias por adelantado
seleccione * de cus donde rownum entre 2 y 6;
Eso es completamente incorrecto Porque, ROWNUM
es una pseudocolumna que se incrementa a 2 solo cuando comenzó en ROW
uno (al azar, por supuesto). En su consulta, el predicado ROWNUM BETWEEN 2 AND 6
tiene sentido, ya que ROWNUM aún no se ha asignado.
Comprendamos esto paso a paso:
Comprender cómo se interpreta una instrucción SQL. Después de analizar la consulta, se aplica el filtro.
En su consulta, el filtro
ROWNUM BETWEEN 2 AND 6
tiene sentido, dado que Oracle aún no ha asignadoROWNUM
1 porque la primera fila aún no se ha extraído.Cuando se obtiene la primera fila, entonces
ROWNUM
se asigna como un pseudo-número. Pero el filtro en su consulta apunta directamente a filas entre 2 y 6, lo cual es absurdo. Por lo tanto, no se devuelven las filas.
Mysql no tiene rownum.
Si está buscando un oráculo, quizás pueda intentar algo como esto:
seleccione * de (seleccione cus. *, rownum como row_num de cus) donde row_num entre 2 y 6;
o
seleccione * de (seleccione cus. *, rownum como row_num de cus) donde row_num> 1 y row_num <= 6;