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

delete database 的問題??

尚未結案
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-07 10:41:54 IP:202.175.xxx.xxx 未訂閱
執行delete時, 這句sql 能夠執行 DELETE FROM SHIP30A WHERE MANIF_NO IN (SELECT MANIF_NO FROM SHIP30A WHERE (MANIF_DATE<=37621)); 但這一句就不能完全執行, 每次也是沒有回應 它是有DELETE 到TABLE中的資料, 但就不能完全完成整個DELETE 只DELETE 了一半便停了沒回應, 有沒有大大知道是何問題??? 是不是DELETE COMMAND 不能寫得這樣複製??? DELETE FROM SHIP30B WHERE MANIF_NO IN (SELECT B.MANIF_NO FROM SHIP30A AS A, SHIP30B AS B WHERE (A.MANIF_NO=B.MANIF_NO) AND (A.MANIF_DATE<=37621))
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-07 11:45:26 IP:61.71.xxx.xxx 未訂閱
引言: 執行delete時, 這句sql 能夠執行 DELETE FROM SHIP30A WHERE MANIF_NO IN (SELECT MANIF_NO FROM SHIP30A WHERE (MANIF_DATE<=37621)); 但這一句就不能完全執行, 每次也是沒有回應 它是有DELETE 到TABLE中的資料, 但就不能完全完成整個DELETE 只DELETE 了一半便停了沒回應, 有沒有大大知道是何問題??? 是不是DELETE COMMAND 不能寫得這樣複製??? DELETE FROM SHIP30B WHERE MANIF_NO IN (SELECT B.MANIF_NO FROM SHIP30A AS A, SHIP30B AS B WHERE (A.MANIF_NO=B.MANIF_NO) AND (A.MANIF_DATE<=37621))
語法看來似乎沒有問題, 不妨試試看 delete from 先改為 select * from , 檢查一下是否可以找出記錄來再嘗試delete 的動作
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-07 12:06:49 IP:202.175.xxx.xxx 未訂閱
這句可以執行 SELECT * FROM SHIP30A WHERE MANIF_NO IN (SELECT MANIF_NO FROM SHIP30A WHERE (MANIF_DATE<=37621)); 但這句就不能 SELECT * FROM SHIP30B WHERE MANIF_NO IN (SELECT B.MANIF_NO FROM SHIP30A AS A, SHIP30B AS B WHERE (A.MANIF_NO=B.MANIF_NO) AND (A.MANIF_DATE<=37621))
timhuang
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-07 12:40:05 IP:203.95.xxx.xxx 未訂閱
Hi, 請問執行這句會有什麼錯誤訊息? 另外是使用什麼資料庫呢? SELECT * FROM SHIP30B WHERE MANIF_NO IN (SELECT B.MANIF_NO FROM SHIP30A AS A, SHIP30B AS B WHERE (A.MANIF_NO=B.MANIF_NO) AND (A.MANIF_DATE<=37621))
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-07 12:44:03 IP:202.175.xxx.xxx 未訂閱
沒有錯誤訊息, 但等了很久, 然後就停止回應 是用dbase 4.0, dbf檔
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-07 15:22:40 IP:202.175.xxx.xxx 未訂閱
各位, 我發現 DELETE FROM SHIP30B WHERE MANIF_NO IN (SELECT MANIF_NO FROM SHIP30A); 這句能執行, 但要等很久才有結果 而這句 DELETE FROM SHIP30A WHERE MANIF_NO IN (SELECT MANIF_NO FROM SHIP30A); 就執行得比上句快很多 而當我再加多一個以上的條件後, 它就很久都沒有回應 是不是一涉及兩個TABLE 就會造成這個情況,
timhuang
尊榮會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-07 15:55:45 IP:203.95.xxx.xxx 未訂閱
基本上應該和你的資料筆數有很大的關係. 另外在 table 上建索引應該也會有相當的幫助, 可以提供你的資料筆數狀況及索引狀況供大家參考, 以提供更有效的方法!!
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-07 16:14:15 IP:202.175.xxx.xxx 未訂閱
ship30a 的筆數有8447, 索引有以下這些:manif_no, manif_date, vessel, vessel str(manif_no), vessel voyage ship30b 的筆數有111898 索引有以下這些:con_id, manif_no, manif_no con_id 因為這次我要為公司做backup, 所以要把原來部份的資料減去, 所以還有很多table, 這個30b 的筆數在眾多table中已經算少了, 有些table的筆數還達30萬, 其實有沒有其他的方法去做backup, 因這次backup 的目的主要是把2002年以前的資料減去??? 請教各位大大~~~~
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-08 09:39:53 IP:202.175.xxx.xxx 未訂閱
沒有大大能解決嗎??? 這次真的很急, 希望各位大大能幫忙幫忙~~~感謝
timhuang
尊榮會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-09-08 12:03:51 IP:203.95.xxx.xxx 未訂閱
桌上型資料庫弟不是很熟, 不過這個狀況看來確實是資料筆數影響到了效能, P.D. 兄對這方面較有經驗, 你可以請教他看看. 若是執行比較久, 但仍有結果的話, 倒沒關係, 但若是沒有結果的話, 可以考慮分批作業, 如先刪 2001 年前的, 再刪 2002/1-3, 再刪 2002/4-6 等, 這種方式或許也有些許幫助!
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-09-08 12:43:55 IP:202.175.xxx.xxx 未訂閱
我嘗試個這兩句, 都能執行~~~~ DELETE FROM SHIP30B WHERE MANIF_NO IN (SELECT B.MANIF_NO FROM SHIP30A AS A, SHIP30B AS B WHERE (A.MANIF_NO=B.MANIF_NO) AND (A.MANIF_DATE=36615)) DELETE FROM SHIP30B WHERE MANIF_NO IN (SELECT B.MANIF_NO FROM SHIP30A AS A, SHIP30B AS B WHERE A.MANIF_NO=B.MANIF_NO AND A.MANIF_DATE IN (36556, 36585, 36616, 36646, 36677, 36707, 36738, 36769, 36799, 36830, 36860, 36891)) 是不是delete database 的時候不能用範圍來delete, 只可以用指定條件來delete??
timhuang
尊榮會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-09-09 16:14:30 IP:203.95.xxx.xxx 未訂閱
基本上你將 where 的範圍縮小後, 當然能比較快完成你下達的操作, 所以弟才建議你改用分批處理的方式進行囉!
js1981
一般會員


發表:10
回覆:17
積分:5
註冊:2004-08-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-09-09 17:38:41 IP:202.175.xxx.xxx 未訂閱
這個方法其實不是太理想, 因為我要delete 的資料有6,7萬次多 如果要指定條件, 不能用範圍,即manif_date<=36890 就會出現以下的sql, 會變成無限~~~ DELETE FROM SHIP30B WHERE MANIF_NO IN (SELECT B.MANIF_NO FROM SHIP30A AS A, SHIP30B AS B WHERE A.MANIF_NO=B.MANIF_NO AND A.MANIF_DATE IN (36556, 36585, 36616, 36646, 36677, 36707, 36738, 36769, 36799, 36830, 36860, 36891, 36892, 36893, 36894,...................))
系統時間:2024-06-29 11:19:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!