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

刪除重覆的值

尚未結案
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-21 20:10:52 IP:218.162.xxx.xxx 未訂閱
小弟在設計資料表之初, 忘了加上Primary key , 程式運行一段時日之後, 發現該資料表出現了很多重覆的值, 如何下SQL指令, 才能把多餘重覆的記錄刪除, 只留下一筆呢?
danielldf
一般會員


發表:44
回覆:60
積分:20
註冊:2003-05-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-21 21:01:20 IP:218.16.xxx.xxx 未訂閱
您好,請參考:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36371 努力过,还有什么遗憾呢!
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-22 04:40:12 IP:218.162.xxx.xxx 未訂閱
謝謝 連結中的解方法如下(by timhuang) 但這有一個問題 如果資料表test要設定的primary key 只有userid 時 不和道要如何解決    ---------------------------------------------------------------------------------------- 假設這個問題中的資料是不允許這種資料存在的, 這時候就先將重覆的資料找出, 存入 temp table 中, 然後將原資料表的資料有重覆的全部刪去, 再來就是把 temp table 中的資料裝回來即可, 如下:    table name : test column 1: userid column 2: username column 3: userage    假設 table 如上, 做法如下:        select userid, username, userage into #tmp from test group by userid, username, userage having count(*) > 1    delete test from test a, #tmp b where a.b.userid and a.username=b.username and a.userage=b.userage    insert test select * from #tmp    drop table #tmp    完成後記得上該上的 primary key 哦. 否則如何發生這種重覆性的資料都不知道, 這樣真的很對不起資料庫的.. ~~     
引言: 您好,請參考:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36371 努力过,还有什么遗憾呢!
danielldf
一般會員


發表:44
回覆:60
積分:20
註冊:2003-05-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-22 10:15:55 IP:218.16.xxx.xxx 未訂閱
您的意思是不是說你現在的表中只有“userid”可以設為primary key ?如果這一字段允許重復資料存在的話,可以再增一個字段作主鍵的。如timhuang 所言“弟建議你一定要去加個流水號” alter table temp add sn int indentity(1,1) constraint snPK not null 這樣增加一個字段後,也可以手動刪除了你認為重復的記錄了。 努力过,还有什么遗憾呢!
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-25 04:45:04 IP:218.162.xxx.xxx 未訂閱
謝謝    小弟的意思是在設計資料庫之初,我忘了設定table的primary key, 程式上線之後發現資料庫中有重覆的值如下 userid        username                userage 1        張三                12 1        李四                22 2        王五                12 3         Jhon                11 3        Mary                12. . . . 小弟想把Userid 設為primary key, 同一個userid 的資料只留下其中任一份(例如張三和李四 userid 同為1,只留下張三和李四其中一人即可) 如果使用下面的SQL  select userid, username, userage into #tmp from test group by userid, username, userage having count(*) > 1    還是會留下兩筆資料    請問有沒有解決的方法    
引言: 您的意思是不是說你現在的表中只有“userid”可以設為primary key ?如果這一字段允許重復資料存在的話,可以再增一個字段作主鍵的。如timhuang 所言“弟建議你一定要去加個流水號” alter table temp add sn int indentity(1,1) constraint snPK not null 這樣增加一個字段後,也可以手動刪除了你認為重復的記錄了。 努力过,还有什么遗憾呢!
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-25 09:45:37 IP:210.68.xxx.xxx 未訂閱
引言: __________________________________________________________ 小弟的意思是在設計資料庫之初,我忘了設定table的primary key, 程式上線之後發現資料庫中有重覆的值如下 userid username userage 1 張三 12 1 李四 22 2 王五 12 3 Jhon 11 3 Mary 12. . . . 小弟想把Userid 設為primary key, 同一個userid 的資料只留下其中任一份(例如張三和李四 userid 同為1,只留下張三和李四其中一人即可) 如果使用下面的SQL  select userid, username, userage into #tmp from test group by userid, username, userage having count(*) > 1    還是會留下兩筆資料    請問有沒有解決的方法 _____________________________________________________________________    你的需求是 假如userid重複, 隨機挑一筆出來即可.. (那另外沒被挑到如何處理呢??另依個問題)    1. 先取出一筆  select userid,max(username) username     from table1    group by userid    2. 根原來的join一起即可 , 存到另依個table insert into table2 Select a.userid,a.username,a.age  from table1 a, ( select userid,max(username) username     from table1    group by userid) b  where a.b.userid    and a.username=b.username               ~悠遊法國號~
HarryZhang
一般會員


發表:19
回覆:25
積分:8
註冊:2003-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-25 11:24:46 IP:218.18.xxx.xxx 未訂閱
select distinct field_key from table//With DISTINCT, you can eliminate duplicates and see only the unique field_key Select count(*) from table .//再用这个数减去上面那条语句得到的数,就是你重复的数.如果是很少一两个,你可以手动改一下不就行了.再加上primary key.OK? 但对于很多,这不是一个好办法. Harry Zhang
------
Harry Zhang
系統時間:2024-06-28 17:39:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!