欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

单词随机连接三个词组

程序员文章站 2022-06-30 19:27:36
闲来无事刷技术论坛,看到一个这样的问题: 感觉题材很新颖,角度很刁钻,从业至今还未碰到过类似需求,今日反正也是闲着,索性解答一番。首先当然是生成测试数据。 结果如图: 写作时间: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

=====================================================================================

本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。

单词随机连接三个词组