Sql 一行的随机记录
我有下表,其中包含数据。我希望从strval表中随机选择2行,并在循环中填充表S1 我想要这样的东西Sql 一行的随机记录,sql,oracle,random,Sql,Oracle,Random,我有下表,其中包含数据。我希望从strval表中随机选择2行,并在循环中填充表S1 我想要这样的东西 Create table s1(id primary key,strval1, strval2) as select level,random_rec(strvals), random_rec(strvals) from dual connect by level<=10; 无效 1, 'AAAA', 'AAAA' Create table strvals(
Create table s1(id primary key,strval1, strval2) as
select level,random_rec(strvals), random_rec(strvals)
from dual
connect by level<=10;
无效
1, 'AAAA', 'AAAA'
Create table strvals(
strval varchar2(4),
constraint pk_strval primary key (strval)
);
insert into strvals
values(
'AAAA'
);
insert into strvals
values(
'BBBB'
);
insert into strvals
values(
'CCCC'
);
从表中获取随机字符串可能很棘手。一种方法是使用相关子查询-correlation子句确保子查询不会优化为只运行一次 因此,这里有一种方法:
select id, strval,
(select s2.strval
from strvals s2
where s2.strval <> x.strval and x.id > 0
order by dbms_random.random fetch first 1 row only
) as strval2
from (select id,
(select strval
from strvals
where x.id > 0
order by dbms_random.random fetch first 1 row only
) as strval
from (select level as id
from dual
connect by level < 25
) x
) x;
和是一个dbfiddle。要减少许多行中的慢速dbms_random.value,我建议使用以下技术: 具有 rand as按dbms选择行\u numberroverder\u random.n值,strval from strvals ,cnt作为从兰德选择计数*m
,生成器为select level id,ceildbms_random.value*cnt.m rnd从cnt connect by level谢谢我点击了代码标签,并认为这将格式化代码。我是否需要或[]标签进行格式化谢谢您的回复和专业知识。我的要求是有两个字符串作为输出的一部分,即1,'AAAA','BBBB'2,'CCCC','BBBB'3,'CCCC','AAAA'ah,好的,完成-请查看更新的答案,抱歉,我错过了另一个要求-有不同的字符串。。。不确定我的方法是否有效…@Beefstu好的,用2个strval完成。请查看最新更新,了解您的帮助和雄辩的解决方案。希望我能自己承担剩下的事情。太好了!!谢谢你的帮助和帮助expertise@Beefstu . . . 如果这回答了你的问题,你可以接受答案。谢谢你的评论,但你甚至没有对答案投赞成票:所以请向我投赞成票
select id, strval,
(select s2.strval
from strvals s2
where s2.strval <> x.strval and x.id > 0
order by dbms_random.random fetch first 1 row only
) as strval2
from (select id,
(select strval
from strvals
where x.id > 0
order by dbms_random.random fetch first 1 row only
) as strval
from (select level as id
from dual
connect by level < 25
) x
) x;