单词随机连接三个词组
程序员文章站
2022-03-17 09:33:49
闲来无事刷技术论坛,看到一个这样的问题: 感觉题材很新颖,角度很刁钻,从业至今还未碰到过类似需求,今日反正也是闲着,索性解答一番。首先当然是生成测试数据。 结果如图: 写作时间:2018-11-20 本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬 ......
闲来无事刷技术论坛,看到一个这样的问题:
我现在有个表,里面有100个不同的单词,每个单词对应有大概20个词组,我想通过sql,每个单词随机获取对应的3个词组,请问怎么写可以实现?
感觉题材很新颖,角度很刁钻,从业至今还未碰到过类似需求,今日反正也是闲着,索性解答一番。首先当然是生成测试数据。
--单词表 create table [dbo].[dancibiao]( [bh] [int] identity(1,1) not null primary key, [danci] [nvarchar](100) not null ) --词组表 create table [dbo].[cizubiao]( [bh] [int] identity(1,1) not null primary key, [dancibh] [int] not null, [cizu] [nvarchar](100) not null ) --插入测试数据。 --为了方便生成数据,没有真的使用单词和词组,而是选择了替代方案。 declare @bl nvarchar(100) declare @xl int declare @cizu nvarchar(100) declare @xlcz int set @bl='a' set @xl=0 while @xl<100 begin set @xl=@xl+1 set @bl=@bl+cast (@xl as nvarchar(100)) set @xlcz=0 set @cizu=@bl insert into dancibiao(danci) values(@bl) while @xlcz<20 begin set @xlcz=@xlcz+1 set @cizu=@cizu+'_'+ cast(@xlcz as nvarchar(100)) insert into cizubiao(dancibh,cizu) values(@xl,@cizu) set @cizu=@bl end set @bl='a' end
--第一种解决方案:sql批处理 create table #linshibiao( suijishu int not null ) insert into #linshibiao (suijishu) select cast(rand()*20+1 as int) insert into #linshibiao (suijishu) select cast(rand()*20+1 as int) insert into #linshibiao (suijishu) select cast(rand()*20+1 as int) select a.danci,a.cizu from (select row_number() over(partition by a.danci order by b.bh) as bh, a.danci,b.cizu from dancibiao a inner join cizubiao b on a.bh=b.dancibh ) a inner join #linshibiao b on a.bh=b.suijishu drop table #linshibiao
--第二种解决方案 select a.danci,a.cizu from (select row_number() over(partition by a.danci order by b.bh) as bh, a.danci,b.cizu from dancibiao a inner join cizubiao b on a.bh=b.dancibh) a inner join (select cast(rand()*20+1 as int) as bh,cast(rand()*20+1 as int) as bh2,cast(rand()*20+1 as int) as bh3) b on a.bh=b.bh2 or a.bh=b.bh3 or a.bh=b.bh
结果如图:
写作时间:2018-11-20
=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。
推荐阅读