博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我现在有个表,里面有100个不同的单词,每个单词对应有大概20个词组,我想通过sql,每个单词随机获取对应的3个词组,请问怎么写可以实现?...
阅读量:7165 次
发布时间:2019-06-29

本文共 2129 字,大约阅读时间需要 7 分钟。

  闲来无事刷技术论坛,看到一个这样的问题:

我现在有个表,里面有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 intdeclare @CiZu nvarchar(100)declare @XLCZ intset @BL='A'set @XL=0while @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 ) Ainner join #LinShiBiao B on A.BH=B.SuiJiShudrop 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) Ainner 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

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

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

转载于:https://www.cnblogs.com/j20171203/p/9989354.html

你可能感兴趣的文章