产生这种结果可以有两种方式解决:
1、order by 字段建立主键约束
2、将rownum提到外层使用,语句:
SELECT ROWNUM,tt.* FROM (
SELECT * FROM t_test t
)tt
采用这两种方式之一,输出的结果就同我们预想的一样。
但是,在使用的过程中发现了另外一个问题,在对分组字句使用rownum时显示乱序。
sql语句:
SELECT * FROM (
SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype
) tt WHERE ROWNUM<3
执行结果并没有如预期显示子查询结果的前两行数据。
解决方法有两个:
1、分组内部先排序
SELECT * FROM (
SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype ORDER BY MAX(t.tid)
) tt WHERE ROWNUM<3
2、分组外多包层查询
SELECT ttt.* FROM (
SELECT ROWNUM row_num,tt.* FROM (
SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype
) tt
) ttt WHERE ROWNUM<3