oracle 随机选多,sql – 在Oracle中选择随机行

我需要从一个表中随机选择值,例如tableA.a_id是一个VARCHAR2,并使用该值插入另一个表.例如,假设需要将三列插入到100行tableX中(序列号,100到999之间的随机数,以及tableA.a_id的值):

insert into tableX

select

rownum,

dbms_random.value(100,999), 0),

(select a_id from

(

SELECT a_id

FROM tableA

ORDER BY dbms_random.value

)

where rownum = 1)

from

(select level from dual connect by level <= 100);

但是,不是从tableA.a_id中为每一行选择一个随机行,而是为所有行选择相同的值,例如:

1 129 A-ID-48

2 849 A-ID-48

3 367 A-ID-48

但是,如果我重复执行子查询,每次都会得到一个新值(显而易见的原因),例如:

select a_id from

(

SELECT a_id

FROM tableA

ORDER BY dbms_random.value

)

where rownum = 1;

结果将在每次执行后:

A-ID-7

A-ID-48

A-ID-74

如何更改原始查询,或者为此提出一个新查询,将每个插入行的tableA的a_id列中的随机行插入到目标表中?欲望结果:

1 129 A-ID-7

2 849 A-ID-48

3 367 A-ID-74

更新1

基于mathguy answer,我更新了单个表选择的查询:

insert into tableX

select

rownum,

round(dbms_random.value(100,999), 0),

a_id

from

(

select

round(dbms_random.value(1, (select count(*) from tableA)), 0) tableX_rand_num

from tableX

) x

join

(

select

a_id,

dbms_random.value() rnd,

rownum tableA_rownum

from tableA

order by rnd

) a

on x.tableX_rand_num = a.tableA_rownum

where rownum <= 100;

限制:使用此方法插入的行数不会与父表(tableX)中可用的数字记录无关.换句话说,您只能插入与tableX中可用的总行数一样多的记录.例如如果tableX有200条记录,并且您希望插入1000,则上述查询只允许您插入最多200行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值