请教多表合并的优化方法(100分)

  • 主题发起人 主题发起人 huamulan
  • 开始时间 开始时间
H

huamulan

Unregistered / Unconfirmed
GUEST, unregistred user!
我把问题简化一下:
现在我有三个ADOquery ,每个query里都有十几万条数据,但没有数据表。数据有两个字段,时间T,和数据V。我要把这三个ADOquery的数据根据时间T排列成一张表,
(即:做成字段为T,V1,V2,V3的一张表),请问怎么做?
注: 不能用select 表.字段 form 表 此类方法。因为.....我的query里没有对应实际的数据表,里面存的只是查询后返回的数据。大家明白了吗?
请高手赐教。(庸庸之辈请口下留情).
 
在SQL中合并吧。应该可以在一个会话中实现的呀。如果是用时间合并的话,用GROUP应该没有问题吧。
 
select (第一个表的时间字段和三个表的三个数据 字段) into 组合表 While 三个表的时间字段一致
 
就这样查询出来不就行了么:

select a.字段,b.字段,c.字段
from 表1 a
left join 表2 b on b.关键字段=a.关键字段
left join 表3 c on c.关键字段=a.关键字段

或者是直接性的联合就用union将三个连在一块就行了
 
ADOQUERY1.FILEDBYNAME('').ASSTRING传到一个表上
或者楼上的UNION
 
楼上的诸位:你们都没有看明白啊!
从WINCC返回的是三个数据集。不是数据表文件!!! 没有看明白就出招!!!
现在情况 是这样,三个ADOquery里各有一个数据集(数据集并没有数据表文件)。怎么将ADOquery里的数据集 合成一张表????
 
如果不考虑更新的话,可以自己手工合并数据集。
一个一个字段取出来,然后自己整理。
 
楼上的dinglj1760同志: 你的回答连儿童也会!
 
select into table2 from table1 或insert into table2 select * from table1
 
这个好象不太可能吧。。。我看此题多办无解
为什么拿到3个数据集里了还要合并呢,不可以在拿到数据集之前先处理吗?
 
先建一个内存表TClientDataSet,设置字段为T、V1、V2、V3,其中T为Key字段,其他三个缺省值为0。
遍历Query1,把所有记录Insert到TClientDataSet。
遍历Query2,根据Key值Locate ClientDataSet,定位到记录就Update,否则就Insert。
遍历Query3,根据Key值Locate ClientDataSet,定位到记录就Update,否则就Insert。

算法不复杂,就是可能很花时间。如果谁有一眨眼功夫就可能搞定的办法,我倒是要认真的学习学习。
 
楼上的aabbccc先生:用遍历的方法是最最费时费资源的。
一个Query里就有十几万条记录,用你的方法,非得一个小时才完成不可!!所以绝对不行。
 
不知道你这样做的意义是什么?
既然每个TADOQuery都是通过T-SQL而产生的数据集,那么用T-sql在产生三个DataSet之间就Union在一起我觉得完全是可以的,而且效率一定也是最高的。
不知道LZ难道还有别的什么用意?[?]
 
精神可嘉,不过我认为让表来做这些事情更快。
毕竟数据库 发展了这么久,有很多东西我们是要拿过来利用的
 
后退
顶部