如何合并查询结果集

beyond_goal 2003-07-26 11:52:18
我通过adoquery1、adoquery2分别查询t1、t2两张表,
select * from t1
select * from t2
表t1和t2的完全相同
如何能将查询结果合并起来同时显示在一个dbgrid框里面?
...全文
61 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
killlaoli 2003-07-27
  • 打赏
  • 举报
回复
用access,多表间记录union,总共10万条记录...

30秒都不能接受???(要是放光盘里更恐怖了)

服了...

偶以前做的一个项目,db也是access,有一个表9万多条记录,那个窗体光打开就得十秒左右的说...
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
决定用union了,等音乐的问题解决了就揭帖
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
1多w条大概要3秒,用的是access数据库,那么10w条要半分钟?绝对不可接受

不过还是感谢各位老大给的建议,再问一句,我的程序在查询同时在播放背景音乐用的是mediaplayer控件,是否会因为查询时间长,占用系统资源大,或者是单线程的原因,使音乐播放出现问题?比如停顿,走调什么的?
killlaoli 2003-07-27
  • 打赏
  • 举报
回复
你可以编程实现将:
各个query的插到一个与dbgrid连接的query中,当然,每插一个的同时你都得判断一下与已有的是否重复...
这样比union应该是慢很多了,不信可以一试...
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
1多w条大概要3秒,用的是access数据库,那么10w条要半分钟?绝对不可接受
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
记录大概有10w条左右,数据库可能放在光盘上面
记录按照时间分成多个表,如果填写时间则查询相应的表,如果不填写时间,则查询全部表
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
对阿,就是这个问题怎么才能解决?我现在就是想用多个adoquery同时查询多张结构相同的表,并把结果拼合到一起
yesxwl 2003-07-27
  • 打赏
  • 举报
回复
我想最简单的办法是用union,速度问题你可以测试下是否能接受

select * from table2 union all select * from table3
killlaoli 2003-07-27
  • 打赏
  • 举报
回复
"老大们看清楚了再回阿........"

为什么要说“们”?我回复时没看到你三楼的帖子,只看到二楼的过客了,相差1分钟而已嘛...

不扯淡了,谈问题...

我觉得用union还不错,不union你自己做的话会更慢的,你用query1查t1,query2查t2...回头你不得攒一起去啊?有重复记录你也不能都显示吧?我觉得你不会作得比union快的...

things 2003-07-27
  • 打赏
  • 举报
回复
DBGrid只能链接一个数据集,所以只能在一个QUERY中写语句。
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
老大们看清楚了再回阿,union的方法我知道,但是那样就无法用多个query同时查询了吧
因为数据量比较大
select * from t1
union
select * from t2
union
select * from t3
.....
这样下去查询速度会很慢的阿
oklida 2003-07-27
  • 打赏
  • 举报
回复
SQL 用UNION语句
killlaoli 2003-07-27
  • 打赏
  • 举报
回复
过客那样的话不是成笛卡儿积了...

应该是
select * from t1
union
select * from t2
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
如果在同一个adoquery里面写
select * from t1 union select * from t2
虽然可以合并查询结果,但是无法多线程同时查询了
求可实现多线程查询同时合并查询结果集的方法
李_军 2003-07-27
  • 打赏
  • 举报
回复
select * from t1,t2
beyond_goal 2003-07-27
  • 打赏
  • 举报
回复
hoho看来该揭帖了,谢谢大家了
zhouxiaochenchina 2003-07-27
  • 打赏
  • 举报
回复
select * from t1 union select * from t2
用一个query就可以了
谷戈 2003-07-27
  • 打赏
  • 举报
回复
select * from t1
union
select * from t2
yesxwl 2003-07-27
  • 打赏
  • 举报
回复
==============unit2:线程thread1;====================
unit Unit2;
interface
uses
Classes {$IFDEF MSWINDOWS} ,mplayer, Windows {$ENDIF};

implementation
uses unit1;

procedure thread1.Execute;
var
m:TmediaPlayer;
begin
SetName;
Unit1.Form1.MediaPlayer1.Open;
unit1.Form1.MediaPlayer1.Play;
{ Place thread code here }
end;

end.
==========Unit1:mainform=============

Form1中放一mediaplayer;
FileName:=C:\WINDOWS\MEDIA\The Microsoft Sound.wav
deviceType:=dtAutoSelect

uses unit2;
procedure TForm1.Button5Click(Sender: TObject);
var
m:Thread1;
begin
m:=Thread1.Create(false);
end;
sky_234 2003-07-27
  • 打赏
  • 举报
回复
你可以在数据库端里写一个函数,返回的结果为表即可!
加载更多回复(4)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧