请教一个SQL语句

时间:2022-07-28 21:55:28
数据库中A表如下:
ID Content
1    a
2    b
3    c
4    d
5    e
6    f
7    g
8    h
9    i

现在需要随机选出三组数据(B C D),B组一条数据,C组三条数据,D组二条数据,要求每个组中数据不能重复,把三个组数据合并后也不能有重复数据。

注意:这里只是举例子,实际上组数和每组数据量都不是固定的,业务上是先选择第一组,再选择第二组,以此类推。

第一组很好选,我现在的难点是 选择后面的组时怎么保证选出的数据前面的组中没有
请高手指点怎么解决这个问题?

9 个解决方案

#1


select top 1 * from tb

select top 3 * from tb where id not in (刚刚抽走的ID)
以此类推

#2


引用 1 楼 q107770540 的回复:
select top 1 * from tb

select top 3 * from tb where id not in (刚刚抽走的ID)
以此类推

选出的数据没有存入数据库

#3


每天回帖即可获得10分可用分!

#4


临时保存下 已经抽走的ID
下次在获取时 not in(若干ID)

#5


引用 2 楼 durongjian 的回复:
引用 1 楼 q107770540 的回复:
select top 1 * from tb

select top 3 * from tb where id not in (刚刚抽走的ID)
以此类推

选出的数据没有存入数据库
这样行

#6


有点难度

#7


我的理解也就是分页取数据而已。。这个只是分页数据取出总和。。

#8


解决了,结贴去了
就用4楼的思路

#9



create  table ta
(
get_id  int identity(1,1) ,
t_id int,
Content nvarchar(40)
)



create table tb
(
tb_ID  int,
Content nvarchar(40)

)
insert into tb
select 1 ,'a'
union select 2,'b'
union select 3,'c'
union select 4,'d'
union select 5,'e'
union select 6,'f'
union select 7,'h'
union select 8,'i'
union select 9,'j'

insert into ta(t_id,Content)
select top 1 * from tb order by newid()

select t_id ,Content from ta --获取第一条数据

insert into ta(t_id,Content)
select top 2 * from tb  where tb_ID  not in (select t_id from ta) order by newid()

select  t_id ,Content from ta where get_id between 2 and 3 -- 获取第二条


insert into ta(t_id,Content)
select top 4 * from tb  where tb_ID  not in (select t_id from ta) order by newid()

select  t_id ,Content from ta where get_id between 4 and 8 -- 获取第三条



drop table tb

drop table ta


希望对你有帮组,刚做的

#1


select top 1 * from tb

select top 3 * from tb where id not in (刚刚抽走的ID)
以此类推

#2


引用 1 楼 q107770540 的回复:
select top 1 * from tb

select top 3 * from tb where id not in (刚刚抽走的ID)
以此类推

选出的数据没有存入数据库

#3


每天回帖即可获得10分可用分!

#4


临时保存下 已经抽走的ID
下次在获取时 not in(若干ID)

#5


引用 2 楼 durongjian 的回复:
引用 1 楼 q107770540 的回复:
select top 1 * from tb

select top 3 * from tb where id not in (刚刚抽走的ID)
以此类推

选出的数据没有存入数据库
这样行

#6


有点难度

#7


我的理解也就是分页取数据而已。。这个只是分页数据取出总和。。

#8


解决了,结贴去了
就用4楼的思路

#9



create  table ta
(
get_id  int identity(1,1) ,
t_id int,
Content nvarchar(40)
)



create table tb
(
tb_ID  int,
Content nvarchar(40)

)
insert into tb
select 1 ,'a'
union select 2,'b'
union select 3,'c'
union select 4,'d'
union select 5,'e'
union select 6,'f'
union select 7,'h'
union select 8,'i'
union select 9,'j'

insert into ta(t_id,Content)
select top 1 * from tb order by newid()

select t_id ,Content from ta --获取第一条数据

insert into ta(t_id,Content)
select top 2 * from tb  where tb_ID  not in (select t_id from ta) order by newid()

select  t_id ,Content from ta where get_id between 2 and 3 -- 获取第二条


insert into ta(t_id,Content)
select top 4 * from tb  where tb_ID  not in (select t_id from ta) order by newid()

select  t_id ,Content from ta where get_id between 4 and 8 -- 获取第三条



drop table tb

drop table ta


希望对你有帮组,刚做的