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

我现在有个表,里面有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

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

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

我现在有个表,里面有100个不同的单词,每个单词对应有大概20个词组,我想通过sql,每个单词随机获取对应的3个词组,请问怎么写可以实现?的更多相关文章

  1. postgresql-从表中随机获取一条记录

    目录 postgresql如何从表中高效的随机获取一条记录 随机获取一条记录random() 改写1 改写2 改写3 对比 注意 结语 postgresql如何从表中高效的随机获取一条记录 selec ...

  2. 现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码。

    现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码. public class RemoveTwo { //le ...

  3. mysql 导出每张表中的100条数据..............

    windows下配好MYSQL 环境变量,cmd 然后: mysqldump -uroot -p123 [数据库名]--where "1=1 limit 100" --lock-a ...

  4. 随机获取Mysql数据表的一条或多条记录

    随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: sel ...

  5. 从Sql Server表中随机获取一些记录最简单的方法

    * FROM test ORDER BY NewID() 注意,使用时,请将‘test’改为真实的表名.

  6. 想要打动HR的心,UX设计师求职信究竟应该怎么写?

    在努力准备申请一份UX设计师职位时,你最烦心和担忧的事哪一个环节?是写一份UX设计师简历?回答面试官的问题?还是在一遍遍的煎熬中等待一个面试电话?是的,这些都是不轻松的事儿,但还有一个同样糟心的事,那 ...

  7. SQL ser 进行表中的插入操作时,变量字段名,导致报错时解决办法 :动态SQL

    标题不能描述的很清楚,下面具体说所我要描述的问题,和解决的办法. 作为SQL小白一枚,近日在写一段代码,代码如下: 报错显示 变量@vv附近错误. 后来经过了解,原来是因为,这样需要使用 动态SQL去 ...

  8. 在SQL数据库中怎么去掉某一列的中的一写特殊字符

    用REPLACE函数,把空格替换成 ''. 例:去除 表table 中 col 列的空字符去除空格符:update table set col = REPLACE(col,' ','') 还有tab制 ...

  9. SQL Server和MySql获取当前数据库每个表的列数

    Sql server:(连接数据库后,点击当前数据库再新建查询) select count(c.name),o.name from syscolumns c left join sysobjects ...

随机推荐

  1. springmvc 请求参数解析细节

    springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我 ...

  2. 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

    由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...

  3. 【Spark篇】---Spark中Transformations转换算子

    一.前述 Spark中默认有两大类算子,Transformation(转换算子),懒执行.action算子,立即执行,有一个action算子 ,就有一个job. 通俗些来说由RDD变成RDD就是Tra ...

  4. Django+Bootstrap+Mysql 搭建个人博客(一)

    1.1.环境搭建 (1)虚拟环境 mkvirtualenv website pip install django==1.11.7 (2)创建项目和app:website和blog (3)设置中文set ...

  5. 查询运营商的ip段

    查询运营商的ip段 所有的IP地址都是通过国际组织NIC(Network Information Center)统一分配的,目前世界上有三个这样的网络信息中心: InterNic: 负责美国及其他地区 ...

  6. WebSocket刨根问底(一)

    年初的时候,写过两篇博客介绍在Spring Boot中如何使用WebSocket发送消息[在Spring Boot框架下使用WebSocket实现消息推送][在Spring Boot框架下使用WebS ...

  7. Jexus~Linux环境下的部署

    Jexus 即 Jexus Web Server,简称JWS,是Linux平台上的一款ASP.NET WEB服务器,是 Linux.Unix.FreeBSD 等非Windows系统架设 ASP.NET ...

  8. Springboot 拦截器的背后

    今天写了个拦截器对一些mapping做了些处理,写完之后突然很想看看拦截器是怎么加进spring里面.对着源码debug了一遍.又有了新的收获. 1.拦截器的实现 1.实现HandlerInterce ...

  9. Spring Boot2.0:使用Docker部署Spring Boot

    一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...

  10. rabbitmq.config配置参数详解

    rabbitmq.config详细配置参数 详细使用方法请点击:http://www.cnblogs.com/wyt007/p/9073316.html Key Documentation tcp_l ...