線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1155
推到 Plurk!
推到 Facebook!

可以用query再去查詢另一個query嗎?

尚未結案
sera
一般會員


發表:10
回覆:19
積分:5
註冊:2003-06-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-30 12:15:35 IP:211.72.xxx.xxx 未訂閱
我用query查詢完的結果,可以再用另一個query去查詢嗎? 類似 select * from ' query1.... 有這樣的寫法嗎
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-30 12:25:09 IP:203.95.xxx.xxx 未訂閱
Hi, 這是不行的, 可以使用 filter 來進行會比較理想, 你可以查一下 filter 的用法: 將 filter 設為 State = 'CA' or State = 'MA' 再將 filtered 設為 true, 就會過濾出你條件下的資料!
sera
一般會員


發表:10
回覆:19
積分:5
註冊:2003-06-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-30 12:35:55 IP:211.72.xxx.xxx 未訂閱
謝謝你~~ 再請問如果我不只是單純的要過濾而己,還要做一些統計的動作 是不是只能先creat一個table來暫存這些次資料, 但我試過drop這個暫時talbe後,資料庫還是會變大,要怎麼辦呢?    
引言: Hi, 這是不行的, 可以使用 filter 來進行會比較理想, 你可以查一下 filter 的用法: 將 filter 設為 State = 'CA' or State = 'MA' 再將 filtered 設為 true, 就會過濾出你條件下的資料!
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-30 15:23:15 IP:61.216.xxx.xxx 未訂閱
TempTable要寫入資料以前先清空就不會越來越大了..TRY TRY SEE
引言: 謝謝你~~ 再請問如果我不只是單純的要過濾而己,還要做一些統計的動作 是不是只能先creat一個table來暫存這些次資料, 但我試過drop這個暫時talbe後,資料庫還是會變大,要怎麼辦呢?
sera
一般會員


發表:10
回覆:19
積分:5
註冊:2003-06-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-30 16:01:34 IP:211.72.xxx.xxx 未訂閱
chih~謝謝 關於清空table~我不太懂 我是在每一次執行統計時才用query下SQL來create table以產生tamp table 每次統計完就drop table ,這樣做並沒有將table 清空嗎? 又,我要如何才叫作清空table呢? 不好意思~我是新手請見諒
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-30 16:07:48 IP:211.21.xxx.xxx 未訂閱
引言: 謝謝你~~ 再請問如果我不只是單純的要過濾而己,還要做一些統計的動作 是不是只能先creat一個table來暫存這些次資料, 但我試過drop這個暫時talbe後,資料庫還是會變大,要怎麼辦呢?
drop這個暫時talbe後,資料庫還是會變大,請問您是用Access的資料庫嗎? 若是,您可以不要將資料寫回後端就好了,方法如下: 將TQuery的屬性CachedUpdates設為True即可。一樣下Query.Append;Query.Post;只是不要下Query.ApplyUpdates;即可 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-30 16:35:16 IP:203.95.xxx.xxx 未訂閱
引言: 謝謝你~~ 再請問如果我不只是單純的要過濾而己,還要做一些統計的動作 是不是只能先creat一個table來暫存這些次資料, 但我試過drop這個暫時talbe後,資料庫還是會變大,要怎麼辦呢?
先說明你的資料庫種類. 看你的操作法可能不是使用 temp table 吧. 若是要做統計的動作, 可以使用 sub query 來完成你要的資料, 如: 原來的 query select emp_name, title, salary from emp where comp='台北分公司' 然後我要算一些資料如下: select title, sum(salary) from ( select emp_name, title, salary from emp where comp='台北分公司' ) t1 group by title 記得 subquery 要給一個 alias name, 如上例的 t1, 但若是資料庫不支援 subquery 的話, 就只能用 temp table. 若是 mssql 的話, 可以這樣操作: select emp_name, title, salary into #tmp_t1 from emp where comp='台北分公司' select title, sum(salary) from #tmp_t1 group by title drop table #tmp_t1 這樣就可以了!
sera
一般會員


發表:10
回覆:19
積分:5
註冊:2003-06-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-30 18:09:04 IP:211.72.xxx.xxx 未訂閱
謝謝各位大大的意見,我大致懂了,只是女子不才,還是有些問題,大概是因為我的方法錯誤了, 我若照channel的方法,將CachedUpdates設為TRUE,資料庫還是會一直變大, timhuang 的方法我不知道要怎麼做,因為tamp table 是用迴圈一筆一筆寫入的,所以我不知道要如何改,我直接把我的程式碼附上,若有人願意再煩勞幫我看看,有沒有比較好的方法 我的作法很笨,見笑了~~ 目的是要計算某本雜誌每一期的訂購本數 目的是要計算某本雜誌每一期的訂購本數 dm1.q4.Close; dm1.q4.SQL.Clear; dm1.q4.SQL.Add('select detail.magazine ,detail.amount,detail.o_start,detail.o_end from orders inner join detail on orders.o_no=detail.o_no where (detail.magazine=''' combobox2.Text ''') and ((detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')or (detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')) '); dm1.q4.ExecSQL; dm1.q4.open; { 先查出目標雜誌的每一筆訂單明細,結果為 magazine(雜誌名稱),amount(數量),o_start(訂購起始期數),o_end(訂購結束期數) A,1,1,3 A,2,1,3 A,1,2,4 } dm1.q4.First; dm1.q3.Close; dm1.q3.SQL.Clear; dm1.q3.SQL.Add('create table tmp (mname varchar(20),bno integer,amount integer)'); dm1.q3.ExecSQL; for i:=0 to dm1.q4.RecordCount -1 do begin for a:=dm1.q4.FieldByName('o_start').AsInteger to dm1.q4.FieldByName('o_end').AsInteger do begin dm1.q3.SQL.Clear; dm1.q3.SQL.Add('insert into tmp (mname,bno,amount) values(''' dm1.q4.FieldByName('magazine').AsString ''',' inttostr(a) ',' dm1.q4.FieldByName('amount').AsString ')'); dm1.q3.ExecSQL; end; dm1.q4.Next; end; {用迴圈將每筆資料的訂購開始到結束的每一期數量拆開,並暫存到tmp mname(名稱),bno(期數),amount(數量) A,1,1 A,2,1 A,3,1 A,1,2 A,2,2 A,3,2 A,2,1 A,3,1 A,4,1 } dm1.q3.SQL.Clear; dm1.q3.SQL.Add('select bno as 期數 ,sum(amount)as 總數量 from tmp where bno>=' edit1.Text ' and bno<=' edit3.Text ' group by bno'); dm1.q3.ExecSQL; dm1.q3.Open; { 再統計A期刊每一期的訂購數量,結果為 期數,總數量 1,3 2,4 3,4 4.1 } //======刪除暫存table dm1.q4.Close; dm1.q4.SQL.Clear; dm1.q4.SQL.Add('drop table tmp'); dm1.q4.ExecSQL; //====== end;
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-30 19:59:19 IP:203.95.xxx.xxx 未訂閱
ok, 看了你的程式了. 你的做法太浪費 ap 端的時間了, 不需要這麼做, 你先說明你的資料庫種類, 另外你的程式碼, 紅字部分請刪除, ExecSQL 是用在 insert, delete, update , Open 才是用在 select 資料的!!
dm1.q4.Close;
dm1.q4.SQL.Clear;
dm1.q4.SQL.Add('select detail.magazine ,detail.amount,detail.o_start,detail.o_end from orders inner join detail on orders.o_no=detail.o_no where (detail.magazine=''' combobox2.Text ''') and ((detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')or (detail.o_start<=' edit3.Text ' and detail.o_end>=' edit1.Text ')) ');
dm1.q4.ExecSQL;
dm1.q4.open;
sera
一般會員


發表:10
回覆:19
積分:5
註冊:2003-06-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-01 10:18:35 IP:211.72.xxx.xxx 未訂閱
感謝指導! 我的資料庫是access~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-01 11:10:46 IP:203.95.xxx.xxx 未訂閱
那就不要使用 temp table 的功能, access 沒有這樣的功能, 你可以改用 subquery 即可, 如我前面所述.    再舉個例子:    select col1, col2, sum(col3) from (select col1, col2 col3 from table1 where col2 >=200 and col2 <=300) t1 group by col1, col2 其中紅字的部分就是你第一篇中的 select * from ' query1.... 的 query1, 這樣就可以達到你要的功能了!!
sera
一般會員


發表:10
回覆:19
積分:5
註冊:2003-06-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-02 10:20:36 IP:211.72.xxx.xxx 未訂閱
感謝timhuang 及各位的指導~~ 問題解決了
系統時間:2024-06-26 19:00:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!