小编典典

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

sql

我正在尝试从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));

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


阅读 156

收藏
2021-04-15

共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”的行,但它将是一个random tid

2021-04-15