我正在尝试从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));
返回更多行,而不仅仅是一行。我究竟做错了什么?
答案 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
。