sql sql 取重复数据记录 随机取一个

Java 随机从 List&E& 随机获取多个不重复对象,Mysql 随机10条数据 —技术博客
Java 随机从 List 随机获取多个不重复对象,Mysql 随机10条数据
今天白天上班的时候,用到这个方法,记录一下,当用户没有发布信息的时候,从数据库中随机获取10条数据,或者从一个&&&&&&中随机获取到10条数据。&&&随机获取10条数据:SELECT *&
FROM `table1` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table1`)) AS id) AS t2&
WHERE t1.id &= t2.id&
ORDER BY t1.id ASC LIMIT 10上面的解决办法速度较快。List 集合中随机获取10条数据:主要是在&&&&&&集合&size&范围内随机一个int&值,并且保证它不重复。直接上代码:Random index = new Random();
//存储已经被调训出来的List 中的 index
List&Integer& indexList = new ArrayList&&();
List&GroupsListAndToolsBo& newList = new ArrayList&&();
for(int i=0,j;i&i++){
//获取在 list.size 返回内的随机数
j = index.nextInt(list.size());
//判断是否重复
if(!indexList.contains(j)){
//获取元素
indexList.add(j);
newList.add(list.get(j));
i--;//如果重复再来一次
}好久没有发博客了,so 大大别封我账号啊。我后面会加油,年底公司小忙。
版权所属:
原文地址:
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。
¥我需要走的更远,点击我 赞助。
如果还有疑问,点击我加群,为你提供最好的解答。
662
73
245
209
380
818
303
1280
96
319
122064
82975
77432
73447
71696
61659
58668
55721
52056
44824
Blog` 标签
综合技术交流:点击加入--&&[][收费]
综合技术交流:点击加入--&&[][免费]
要求:不能发广告、暴力、政治、付费教程,违者直接踢出。
备注:入群费用5元,没有QQ钱包,可以先支付宝 or 微信扫码支付5元赞助后,我拉您进去。。
扫码赞助:。
所有赞助/开支都讲公开明细,用于网站维护:21:31 提问
sqlserver 两个表关联1:n求随机取一条数据的sql语句实现!
现在要补齐tb1中演唱歌曲字段。条件是去tb2中查找相同艺人演唱过的歌曲,随机填充到tb1中的歌曲名字段
一个歌手不止演唱一首歌,所以tb2中是艺人演唱所有歌曲的集合。tb1中同一个歌手可能出现好几次
补齐时候需根据tb1中艺人名称去tb2也就是艺人歌曲汇总表中查找相同艺人演唱的歌曲名称。
需要在艺人名相同情况下随机取tb2中演唱歌曲名去一一补齐tb1中的字段 tb1
演唱歌曲名
演唱歌曲名
演唱歌曲名称
(tb1中的艺人名会出现好几次每次在tb2中,只要随机的一条来填充)
按赞数排序
基于上回表结构的随机填写,这比上次那个要简单。再变应该也变不出这次SQL和上次SQL了,如果还有新规则,不行就两者自己综合一下。再写就没什么意义了。
update tb1
set ycgqm=(
select bycgqm from (
select t3.id,
(--根据tb1中生成的随机数取歌曲
select ycgqm from (
select b.*,ROW_NUMBER() OVER(PARTITION BY yr ORDER BY ycgqm) AS tnum from tb2 b
) b2 where b2.yr=t3.yr and b2.tnum = t3.rndnum
) as bycgqm
from (--根据tb1中取歌手名称下哪首歌的行号
select t2.*,cast(ceiling(rand(checksum(newid()))*gqtotalnum) as int) as rndnum from
select t.*,(select count(*) from tb2 where yr=t.yr) as gqtotalnum
from tb1 t
) t4 where t4.id = tb1.id
select top 1 t1.*, t2.* from table1 t1 join table2 t2 on t1.name = t2.name order by newid()
谢谢各位热心大侠,这个sql困扰我两天了,还是没有搞定,所以才求助大家的,希望那个大侠会的话,能给我指点下迷津。万分感谢!
你这举得例子让人看不懂。你是要随机tb1中数据还是tb2中数据还是两个表中数据都要随机
初步思路,可以生成行编号,通过rand随机函数获取。
你到底是取数据还是更新数据?
先贴答案吧,sql应该是还能优化,自己再做优化吧。等周末有时间了把这SQL整理成博客中。
create table tb1(
yr varchar(20),
ycgqm varchar(50)
create table tb2(
yr varchar(20),
ycgqm varchar(50)
select * from tb1
insert into tb1(yr,ycgqm) values('a',null);
insert into tb1(yr,ycgqm) values('b',null);
insert into tb1(yr,ycgqm) values('e',null);
insert into tb1(yr,ycgqm) values('a',null);
insert into tb1(yr,ycgqm) values('s',null);
insert into tb1(yr,ycgqm) values('d',null);
insert into tb1(yr,ycgqm) values('e',null);
insert into tb1(yr,ycgqm) values('a',null);
insert into tb2(yr,ycgqm) values('a','aa');
insert into tb2(yr,ycgqm) values('a','ab');
insert into tb2(yr,ycgqm) values('b','bb');
insert into tb2(yr,ycgqm) values('b','ba');
insert into tb2(yr,ycgqm) values('b','bbb');
insert into tb2(yr,ycgqm) values('d','dd');
insert into tb2(yr,ycgqm) values('d','d2');
insert into tb2(yr,ycgqm) values('f','ddd');
insert into tb2(yr,ycgqm) values('c','cc');
insert into tb2(yr,ycgqm) values('a','ac');
update tb1
set ycgqm=
select bycgqm from
select * from
select rownum r,t.*,(select count(*) from tb1 where tb1.yr=t.ayr) as cnt
, ROW_NUMBER() OVER(PARTITION BY anumyr ORDER BY bycgqm) AS tnum from (
select b.*,a.*,anum || ayr as anumyr from (
select rowid as arid,rownum || 'a' as ra,a.yr as ayr,a.ycgqm
,ROW_NUMBER() OVER(PARTITION BY yr ORDER BY yr) AS anum from tb1 a
select rowid as brid, rownum || 'b' as rb ,b.yr as byr,b.ycgqm
as bycgqm from tb2 b
) b where ayr = byr order by ayr
) t order by byr,anum,tnum
) where anum=tnum
arid=tb1.rowid
上次那个是oracle的,忘记是sqlserver了
create table tb1(
id varchar(60),--需要表的主键
yr varchar(20),
ycgqm varchar(50)
create table tb2(
id varchar(60),--表的主键(可以没有)
yr varchar(20),
ycgqm varchar(50)
insert into tb1(id,yr,ycgqm) values(newid(),'a',null);
insert into tb1(id,yr,ycgqm) values(newid(),'b',null);
insert into tb1(id,yr,ycgqm) values(newid(),'e',null);
insert into tb1(id,yr,ycgqm) values(newid(),'a',null);
insert into tb1(id,yr,ycgqm) values(newid(),'s',null);
insert into tb1(id,yr,ycgqm) values(newid(),'d',null);
insert into tb1(id,yr,ycgqm) values(newid(),'e',null);
insert into tb1(id,yr,ycgqm) values(newid(),'a',null);
insert into tb2(id,yr,ycgqm) values(newid(),'a','aa');
insert into tb2(id,yr,ycgqm) values(newid(),'a','ab');
insert into tb2(id,yr,ycgqm) values(newid(),'b','bb');
insert into tb2(id,yr,ycgqm) values(newid(),'b','ba');
insert into tb2(id,yr,ycgqm) values(newid(),'b','bbb');
insert into tb2(id,yr,ycgqm) values(newid(),'d','dd');
insert into tb2(id,yr,ycgqm) values(newid(),'d','d2');
insert into tb2(id,yr,ycgqm) values(newid(),'f','ddd');
insert into tb2(id,yr,ycgqm) values(newid(),'c','cc');
insert into tb2(id,yr,ycgqm) values(newid(),'a','ac');
update tb1
set ycgqm=
select bycgqm from
select * from
select t.*
, ROW_NUMBER() OVER(PARTITION BY anumyr ORDER BY bycgqm) AS tnum from (
select b.*,a.*,cast(anum as varchar(20))+ ayr as anumyr from (
select id as arid,a.yr as ayr,a.ycgqm
,ROW_NUMBER() OVER(PARTITION BY yr ORDER BY yr) AS anum from tb1 a
select id as brid, b.yr as byr,b.ycgqm
as bycgqm from tb2 b
) b where ayr = byr
) t where anum=tnum
arid=tb1.id
select * from tb1
tb1 是dr_bob
tb2 是songlist
tb1 表结构是
[track title]
tb2 表结构
update dr_bob
set isrc =
(select bycgqm from
(select * from
(select t.*
, ROW_NUMBER() OVER(PARTITION BY anumyr ORDER BY bycgqm) AS tnum from (
select b.*,a.*,cast(anum as varchar(20))+ ayr as anumyr from (
select id as arid,a.[track title]
as ayr,a.isrc
,ROW_NUMBER() OVER(PARTITION BY [track title] ORDER BY [track title]) AS anum from dr_bob a
) a,( select id as brid, b.artist as byr,b.isrc
as bycgqm from songlist b
) b where ayr = byr
) t where anum=tnum
arid=dr_bob.id
) where dr_bob.isrc=''
为什么我的这个出来的结果就不是我想要的啊
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
MySQL从一张表怎么随机取50条数据?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
select * from table order by rand() limit 50;
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
SELECT * FROM table_name ORDER BY rand() LIMIT 50;
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
FROM 表名 AS t1
SELECT ROUND( RAND( ) * (SELECT MAX( id )FROM 表名 ) ) AS id
WHERE t1.id &= t2.id
ORDER BY t1.id ASC
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这个东西得分开看了。如果你的表记录没有上万级别。那么order by rand()也可以接受。但是表记录大的时候,order by rand()效率极低。所以建议在提问题的基础上,尽可能交代业务场景~~~。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
order by rand()
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
rand()这玩意,依稀记得,在《高性能mysql》中一再强调,避免使用。结合实际情况,数据量不大几万十几万的,可以用用;再大了,还是用程序实现,再去查询吧。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
rand()可以,但是请记住,上线项目不要用含任何计算的SQL语句。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。怎样从sql数据库中一次随机读取一条数据,而且以后随机读取出的数据不能和以前每次随机读取出的数据重复?
[问题点数:20分]
怎样从sql数据库中一次随机读取一条数据,而且以后随机读取出的数据不能和以前每次随机读取出的数据重复?
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年9月 总版技术专家分月排行榜第一2011年8月 总版技术专家分月排行榜第一2011年7月 总版技术专家分月排行榜第一2011年6月 总版技术专家分月排行榜第一2011年5月 总版技术专家分月排行榜第一2011年4月 总版技术专家分月排行榜第一
2011年3月 总版技术专家分月排行榜第二2011年2月 总版技术专家分月排行榜第二
2011年6月 Web 开发大版内专家分月排行榜第二
2014年6月 .NET技术大版内专家分月排行榜第二2014年1月 .NET技术大版内专家分月排行榜第二
2014年2月 .NET技术大版内专家分月排行榜第三2013年4月 .NET技术大版内专家分月排行榜第三
匿名用户不能发表回复!|

我要回帖

更多关于 sql 获取重复记录 的文章

 

随机推荐