全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1871
推到 Plurk!
推到 Facebook!

Sql 寫法求救?

答題得分者是:ccchen
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-14 09:29:49 IP:61.56.xxx.xxx 未訂閱
1. Table1(keyno), table2(keyno,name) keya keya,keyaname keyb keyc,keycname keyc select table1.keyno,table2.name from table1,table2 where table1.keyno=table2.keyno 只會出現二筆(keya,keyaname),(keyc,keycname) 但我希望出現三筆(keya,keyaname),(keyb,),(keyc,keycname) 請教各位前輩,sql該如何寫 2. 客戶編號為 地區(2) 流水碼(4) ex: LB0001,LB0002, ... LB1201,LB1203,.... 如上: LB1202 已被取消 在下次新增客戶時,希望能補入 1202 之流水碼, 而非補最大碼加一 請教各位,如何用sql 快速找出此斷號之編號 而不用先 把 LB之客戶用 Tquery找出來, 再一筆一筆 scan ,判斷其流水 碼,是否有空號, 二個問題,打擾各位了.thanks.
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-14 10:11:52 IP:61.219.xxx.xxx 未訂閱
1. Table1(keyno), table2(keyno,name) keya keya,keyaname keyb keyc,keycname keyc select table1.keyno,table2.name from table1,table2 where table1.keyno=table2.keyno 只會出現二筆(keya,keyaname),(keyc,keycname) 但我希望出現三筆(keya,keyaname),(keyb,),(keyc,keycname) 請教各位前輩,sql該如何寫 這問題必須使用outer join, 然而語法各資料庫都不相同, 你必須說明為何種資料庫 sybase : where table1.keyno*=table2.keyno Oracle : where table1.keyno=table2.keyno( ) Access: select table1.keyno,table2.name from table1,table2,table1 left join table2 on table1.keyno=table2.keyno 2. 客戶編號為 地區(2) 流水碼(4) ex: LB0001,LB0002, ... LB1201,LB1203,.... 如上: LB1202 已被取消 在下次新增客戶時,希望能補入 1202 之流水碼, 而非補最大碼加一 請教各位,如何用sql 快速找出此斷號之編號 而不用先 把 LB之客戶用 Tquery找出來, 再一筆一筆 scan ,判斷其流水 碼,是否有空號,[/blue] 大概沒什麼好方法, 流水碼你可以選擇用自動新增的欄位型態, again, 依資料庫不同而不同. 問有關資料庫問題最好說明用何種資料庫 發表人 - ccchen 於 2003/01/14 10:15:38
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-14 12:00:41 IP:61.56.xxx.xxx 未訂閱
感謝 ccchen,我用的是 mysql 斗膽再請教一下:(實在不好意思再開版) 我用來電顯示設備, 當有來電時,我會將電話存於 server 2000 內之 telin Table 內, 但如何通知各工作站有電話進來,該來讀取此 telin 資料呢, (來電顯示卡是裝於一台工作站,我寫一支程式一直將資料寫回 telin 內) 我在各工作站之程式內,放一個timer,一直啟動來scan 此 telin Table, (0.1 秒,一次,因來電就要接,不能等), 但此種作法,會拖垮工作站,幾乎沒法 再作其他事, 有否方法當 server 之 telin table 有新資料進來後, 再通知 各工作站來捉取資料,作處理嗎, 一直 Scan 真的不行. 麻煩您,真不好意思.
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-14 12:12:07 IP:61.221.xxx.xxx 未訂閱
補充:  
引言: 2. 客戶編號為 地區(2) 流水碼(4) ex: LB0001,LB0002, ... LB1201,LB1203,.... 如上: LB1202 已被取消 在下次新增客戶時,希望能補入 1202 之流水碼, 而非補最大碼加一 請教各位,如何用sql 快速找出此斷號之編號 而不用先 把 LB之客戶用 Tquery找出來, 再一筆一筆 scan ,判斷其流水 碼,是否有空號
是低!!! 觀念如下: 1.將存放客戶編號的table自我連結找出自己沒有的欄位 2.依照編號排序,找出第一筆就是第一個斷行的編號 寫法參考: select no. from A minus select no. from B A=B=客戶table, no.=編號
------
======================
昏睡~
不昏睡~
不由昏睡~
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-14 14:34:09 IP:61.219.xxx.xxx 未訂閱
引言: 感謝 ccchen,我用的是 mysql 斗膽再請教一下:(實在不好意思再開版) 我用來電顯示設備, 當有來電時,我會將電話存於 server 2000 內之 telin Table 內, 但如何通知各工作站有電話進來,該來讀取此 telin 資料呢, (來電顯示卡是裝於一台工作站,我寫一支程式一直將資料寫回 telin 內) 我在各工作站之程式內,放一個timer,一直啟動來scan 此 telin Table, (0.1 秒,一次,因來電就要接,不能等), 但此種作法,會拖垮工作站,幾乎沒法 再作其他事, 有否方法當 server 之 telin table 有新資料進來後, 再通知 各工作站來捉取資料,作處理嗎, 一直 Scan 真的不行. 麻煩您,真不好意思.
可以嘗試使用 Delphi Indy 網路元件. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24783 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24778 /* 使用中文很辛苦,中華男兒當自強 */ 發表人 - Mickey 於 2003/01/14 14:36:42 發表人 - Mickey 於 2003/01/14 14:40:20
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-14 19:30:18 IP:61.56.xxx.xxx 未訂閱
感謝各位. 測試如下: Mysql 看不懂 select no. from A minus select no. from B 所以流水尋找斷號問題,暫用先捉於query內,再逐筆檢視,還好 1,2秒總能找出 第一個問題: select table1.keyno,table2.name from table1 left join table2 on table1.keyno=table2.keyno 完全符合所須, 如果 在from table1 後多加 (,table2) 會有 not unique table/alias :table1 error 可能是 table1 內 keyno 非唯一 遺憾是我用的是 delphi 4.0 c/s , 沒有indy 元件 可有其他方法? 真麻煩各位,很不好意思.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-15 09:58:06 IP:61.219.xxx.xxx 未訂閱
引言: 遺憾是我用的是 delphi 4.0 c/s , 沒有indy 元件 可有其他方法?
應用 FastNet TNMUDP Component 也可以. Sample Code as following:
// after receive Telephony and modify database regrading tables. 
// Broadcast Message and notify orther Client Computer to re-open regrading tables.
// This Example use port 7 (echo service) for TNMUDP LocalPort & RemotePort Properties. 
procedure TForm1.Button1Click(Sender: TObject);
var s: array[1..6] of char;
begin
   NMUDP1.RemoteHost := 'x.x.x.255'; // Broadcast on TCP/IP x.x.x Network domain
   s := 'ReOpen';
   NMUDP1.SendBuffer(s,sizeof(s));
end;    // ReOpen Data when Received Message.
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  C: array [1..6] of Char;
  I: Integer;
begin
  if NumberBytes<=6 then begin
     NMUDP1.ReadBuffer(C, I);
     if C='ReOpen' then begin
        // ReOpen TQuery ...
     end;
  end;
end;
/* 使用中文很辛苦,中華男兒當自強 */
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-01-16 23:10:02 IP:61.56.xxx.xxx 未訂閱
感謝大家鼎力相助,後來我採用 almailsl 元件,訊息傳遞很快,只可惜用電話去 查尋資料庫,找出人名約一秒內,總感覺有點遲盾,把 mysql之資料庫轉成db檔, 直接放於工作站內,用locate 去查,3萬筆有key,也要一秒多,效益竟比 在網路上之 mysql差. 謝謝大家,很難給分 ko,mickey 謝謝您們.
系統時間:2024-05-19 1:04:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!