一个简单的数据库问题。请大家帮助!(100分)

  • 主题发起人 主题发起人 张辉明
  • 开始时间 开始时间

张辉明

Unregistered / Unconfirmed
GUEST, unregistred user!
我用四个query查询到了四个结果,每个都是6个字段,但四个结果的记录个数不一定相同,
现在我要把四个结果存放到一个表中,那么这个表会有4*6=24个字段,请大家给一个比效好的方法
可不可以用SQL直接解决?怎么写?
 
用存储过程,更快,更简单
 
可以的
用select * into 新表名 from 老表名
 
join in 可不可以
 
insert into table1(field1,field2,..field6)
((select field1,field2,..field6 from table2) union
(select field1,field2,..field6 from table3) union
(select field1,field2,..field6 from table4) union
(select field1,field2,..field6 from table5))
 
利用24字段临时表
使用BanchMove控件或者
select * into 临时表
配合使用left join
 
如果四个表都有相同字段,可以用JOIN连接.
如果没有,则用临时表(如果支持的话).
 
这样不好。
如果每个查询产生100条记录,
则联合后的表有24个字段,100000000条记录
如果每个查询产生10000条记录,......
 
顺便说一下,24个字段的那个表的记录总数,应该是前四个表中最多记录的那个表。
还有没有别的更好的方法呀?:)
 
如你所说,有四个查询语句query1,query2,query3,query4
分别查询返回各是6个字段的记录。
query1下的字段则为:query1-1、query1-2 query1-3 query1-4....query1-6
query2,query3,query4同上。



declare 24个变量,如@query1-1,....@query4-6

将四个query查询出来的结果根据查询最多的那个query循环赋值给这24个变量并INSERT 到要把四个结果存放到的表中。

例如query1是“select query1-1,query1-2,query1-3,....query1-6 from table where ...”
那么改成select @query1-1=query1-1,@query1-2=query1-2,@query1-3=query1-3,....query1-6 from table where ...

然后,insert into 要把四个结果存放到的表(query1-1,query1-2,query1-3,.....query4-6) values(@query1-1,@query1-2,@query1-3,.....@query4-6)

不知道我理解的是不是你想要达到的目的。。。。我想应该是这么做的吧。呵呵
 
再补充一下,实际上四个表的字段结构是一样的。
 
select 字段1,字段2,字段3,字段4 from 表1 Where ...
union select 字段1,字段2,字段3,字段4 from 表2 Where ...
union select 字段1,字段2,字段3,字段4 from 表3 Where ...
union select 字段1,字段2,字段3,字段4 from 表4 Where ...

注:四个字段的名称及类型必须完全一样,表1、表2、表3、表4可以是同一张表,
 
to :浩毛
本人菜呀,帮人帮到底呀。
1。这24个变量是怎么定义的呀?
2。如你所说:“将四个query查询出来的结果根据查询最多的那个query循环赋值给这24个变量”
       query查询出来的结果最多只有6个变量呀,怎么循环给24个变量?
 
急呀,再顶一下!
 
1、declare @字段1 .. 这种,你可以查查帮助
2、用游标

不过我觉得我的解法好复杂啊,你能不能详细说明下你的要求啊。
 
2:浩毛
好呀。
四个Query的结构是一模一样的。(字段名一样,段类型也是一样的),
只是记录个数不等,最多有30个,最少是不定的。

例如:
Query1: Query2: Query3: Query4:
字段aa 字段bb 字段cc 字段dd 字段ee 字段ff 字段aa 字段bb 字段cc 字段dd 字段ee 字段ff 字段aa 字段bb 字段cc 字段dd 字段ee 字段ff 字段aa 字段bb 字段cc 字段dd 字段ee 字段ff
DA1 DB1 DC1 DD1 DE1 DF1 DA1 DB1 DC1 DD1 DE1 DF1 DA1 DB1 DC1 DD1 DE1 DF1 DA1 DB1 DC1 DD1 DE1 DF1
DA2 DB2 DC2 DD2 DE2 DF2 DA2 DB2 DC2 DD2 DE2 DF2 DA2 DB2 DC2 DD2 DE2 DF2 DA2 DB2 DC2 DD2 DE2 DF2
DA3 DB3 DC3 DD3 DE3 DF3 DA3 DB3 DC3 DD3 DE3 DF3 DA3 DB3 DC3 DD3 DE3 DF3 DA3 DB3 DC3 DD3 DE3 DF3
DA4 DB4 DC1 DD4 DE4 DF4 DA4 DB4 DC4 DD4 DE4 DF4 DA4 DB4 DC1 DD4 DE4 DF4 DA4 DB4 DC4 DD4 DE4 DF4
DA5 DB5 DC5 DD5 DE5 DF5
DA6 DB6 DC6 DD6 DE6 DF6


那么我要的结果表为:


字段a1 字段b1 字段c1 字段d1 字段e1 字段f1 字段a2 字段b2 字段c2 字段d2 字段e2 字段f2 字段a3 字段b3 字段c3 字段d3 字段e3 字段f3 字段a4 字段b4 字段c4 字段d4 字段e4 字段f4
DA1 DB1 DC1 DD1 DE1 DF1 DA1 DB1 DC1 DD1 DE1 DF1 DA1 DB1 DC1 DD1 DE1 DF1 DA1 DB1 DC1 DD1 DE1 DF1
DA2 DB2 DC2 DD2 DE2 DF2 DA2 DB2 DC2 DD2 DE2 DF2 DA2 DB2 DC2 DD2 DE2 DF2 DA2 DB2 DC2 DD2 DE2 DF2
DA3 DB3 DC3 DD3 DE3 DF3 DA3 DB3 DC3 DD3 DE3 DF3 DA3 DB3 DC3 DD3 DE3 DF3 DA3 DB3 DC3 DD3 DE3 DF3
DA4 DB4 DC1 DD4 DE4 DF4 DA4 DB4 DC4 DD4 DE4 DF4 DA4 DB4 DC1 DD4 DE4 DF4 DA4 DB4 DC4 DD4 DE4 DF4
DA5 DB5 DC5 DD5 DE5 DF5
DA6 DB6 DC6 DD6 DE6 DF6


这会可清楚了吧!!我也希望大家都能来讨论讨论!
 
怎么没人说话呀,再顶!
 
建议每个表增加一个字段ID其值为记录编号(即标识类型字段)
select query1.字段a1 as a1,query1.字段b1 as a2,query1.字段c1 as a3,
query1.字段d1 as a4,...,query2.字段a1 as b1,query2.字段b1 as b2,query2.
字段c1 as b3,query2.字段d1 as b4,... into query5 from query1,query2
where query1.id *=query2.id (因为query1的纪录最多)
然后用同样的方法将query5 与 query3联结产生query6
......
 
注: query1 的DA1 和 query2 DA1 不要要求相等。
还是用笨一点的办法吧:( 
但我还是出现了问题:
怎么把query1中查询到的记录添加到我的结果表(TableTemp)(它有24个字段)中?我的过程如下:
datasource1.dataset:=query1;
if not DataSource1.DataSet.Eof then DataSource1.DataSet.First;
Tabletemp.Open;
while not DataSource1.DataSet.Eof do
begin
Tabletemp.Append;
Tabletemp.FieldValues['a1']:= DataSource1.DataSet.fieldbyname('aa').asstring;
Tabletemp.FieldValues['b1']:= DataSource1.DataSet.fieldbyname('bb').asstring;
Tabletemp.FieldValues['c1']:= DataSource1.DataSet.fieldbyname('cc').asstring;
Tabletemp.FieldValues['d1']:= DataSource1.DataSet.fieldbyname('dd').asstring;
Tabletemp.FieldValues['e1']:= DataSource1.DataSet.fieldbyname('ee').asstring ;
Tabletemp.FieldValues['f1']:= DataSource1.DataSet.fieldbyname('ff').asstring ;
Tabletemp.Post; //执行到此,出现问题。
datasource1.next;  //如果不执行 tabletemp.post; ,执行到此,也出现问题。
end;

请大家帮助呀!
 
难道一个个大侠们都在睡觉!
 
后退
顶部