一个简单的SQL问题!
要求:从Question表里面随机抽取n个记录,然后插入到Ccd表里面,这个Sql语句怎么写? 问题点数:80、回复次数:22Top
1 楼zyyjc()回复于 2003-06-02 14:10:05 得分 3
我还没想过这个问题呢,关注中Top
2 楼lufancy(奇闻共欣赏,异议相与析)回复于 2003-06-02 14:16:00 得分 50
这个问题不简单哦
我能想到的方法比较麻烦
需要使用存储过程和游标Top
3 楼bbs791109(小别)回复于 2003-06-02 14:22:15 得分 9
假設count=Question表的記錄條數
遍歷Question表﹐取出random(2)(產生0或1)值﹐為0 則不取﹐反之則取出。
直到取出N個記錄或Question表遍歷完為止。Top
4 楼jpyc(九品-沉默)回复于 2003-06-02 14:27:32 得分 9
先提取随机数,然后利用随机数加入SQL语句中实现你的效果不行吗?Top
5 楼Naughty_boy(冷血)回复于 2003-06-02 14:32:51 得分 0
急!我记得我得数据库的书里面好象有这样一句:
select 3 from student,
可是我测试了N遍,老提示出错!Top
6 楼XZHHAI(星之瀚海)回复于 2003-06-02 14:36:37 得分 0
你上面这句是什么意思,取出数据集条数个3?
好象SQL中不支持随机函数,用一条SQL恐怕没法实现的!Top
7 楼fhuibo(永远深爱一个叫“莎”的好女孩儿)回复于 2003-06-02 14:38:34 得分 0
楼主有什么意义吗?Top
8 楼Naughty_boy(冷血)回复于 2003-06-02 14:42:44 得分 0
我们在作一个试题库,要求从中能抽取试题,组成试卷,从数据库中随机选取!
我记得我的数据库系统概论上面好想有着样一个例子的,可是,在Delphi下面就是调试不成功!
7456!!!
:(!!Top
9 楼lovelymelon(小人物)回复于 2003-06-02 14:46:57 得分 9
建议将表question加一个字段rec,该字段的值为当前记录的序号,这样就可以用sql语句查询了
for n:= 0 to 9 do
begin
randomize;
i:=random(10);
form1.Query1.sql.add('select * from question where rec=:s1)'
form1.Query1.ParamByName('s1').Value:=i;
form1.Query1.open;
然后将查出的结果添加到另一个表中
end;Top
10 楼Naughty_boy(冷血)回复于 2003-06-02 15:07:58 得分 0
我得数Question表面有一个字段叫做ID,每个试题的ID都是不一样的!
我的一点想法:
先建立一个数组,元素是数据库里面的ID字段的集合,然后从这个数组里面选择任意的记录,然后插入到Ccd表里面去不知道,这个想法能不能实现?Top
11 楼ZcPascal(Pascal2x)回复于 2003-06-02 15:18:55 得分 0
random() 取出,然后select * from question where recno=random()Top
12 楼Naughty_boy(冷血)回复于 2003-06-02 15:30:05 得分 0
楼上的,SQL好像不能用random,inttostr这一类函数吧!Top
13 楼wycg_cnh20(发奋图强中)回复于 2003-06-02 15:38:59 得分 0
好象不行Top
14 楼firetoucher(风焱)回复于 2003-06-02 15:43:16 得分 0
insert into Ccd
select top n *
from QuestionTop
15 楼lufancy(奇闻共欣赏,异议相与析)回复于 2003-06-02 16:30:12 得分 0
我都说了不是简单问题了
生成随机数后还有一个随机数重复的问题
数据库应当避免插入重复的数据
对于这种比较复杂的查询
使用存储过程吧
上面谈了这么多还没有涉及到插入
楼主的select 3 from student
是掉了一个top(如楼上)
与随机数无关 只是找前3条记录
Top
16 楼lufancy(奇闻共欣赏,异议相与析)回复于 2003-06-02 16:39:22 得分 0
lovelymelon(小人物) 的增加一个索引字段的建议到是不错
可以一试Top
17 楼Naughty_boy(冷血)回复于 2003-06-02 17:38:09 得分 0
你们说得索引字段是不是就是数据库中一个能标识一个记录的字段,每一个记录的这个字段都是不相同的?如果是我的数据库里面已经有了,那就是ID字段呀?Top
18 楼payzq(人生)回复于 2003-06-02 17:56:50 得分 0
select top 随机数(变量) from Question
Top
19 楼taotaoo(蜻蜓)回复于 2003-06-02 19:30:47 得分 0
用随机函数生成你的id号,然后
'install into xx1 from xx2 where id=xxx' 就可以了Top
20 楼lufancy(奇闻共欣赏,异议相与析)回复于 2003-06-03 08:40:31 得分 0
payzq(人生) 的方法每次都只能取前面几条 根本不能随机
taotaoo(蜻蜓) 的方法只能取一个记录
Top
21 楼henry2003(阿波)回复于 2003-06-03 08:48:02 得分 0
var i ,j:integer;
i:=random(100);
for j:=1 to I do
begin
AdoQuery1.sql.add('Insert into Ccd(x1,x2,x3) select a1,a2,a3 from Question where Id='+IntToStr(J));
AdoQuery1.ExecSql;
end;Top
22 楼lufancy(奇闻共欣赏,异议相与析)回复于 2003-06-03 09:40:30 得分 0
henry2003(阿波) 的功能和payzq(人生) 完全一样
而且实现相对复杂Top




