返回多行尝试在Oracle SQL中选择特定行

时间:2016-08-07 15:20:13

标签: sql oracle

我正在尝试从Oracle SQL中的特定行中的字段tid返回一个值,但我得到了一个奇怪的行为。

首先,我试过这个:

 select tid from
 (select tid, rownum as rn from
      (select tid from Train))
 where rn=5;

并成功返回第5行中的值。但是,当我尝试随机化值时,通过执行以下操作将rownum的行从1增加到15:

 select tid from
 (select tid, rownum as rn from
      (select tid from Train))
 where rn=round(dbms_random.value(1,15));

返回更多行,而不仅仅是一行。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

这是因为每行调用dbms_random(),因此它可以生成重复的结果。相反,如果你想要一个随机行,尝试这样的事情:

select tid
from (select tid,
             row_number() over (order by dbms_random.value()) as seqnum
      from Train
     ) t
where seqnum = 1;

这将始终返回“seqnum = 1”的行,但它将是一个随机的tid