刪除重覆的值 |
尚未結案
|
will
中階會員 發表:176 回覆:135 積分:62 註冊:2002-04-14 發送簡訊給我 |
|
danielldf
一般會員 發表:44 回覆:60 積分:20 註冊:2003-05-12 發送簡訊給我 |
|
will
中階會員 發表:176 回覆:135 積分:62 註冊:2002-04-14 發送簡訊給我 |
謝謝
連結中的解方法如下(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 發送簡訊給我 |
|
will
中階會員 發表:176 回覆:135 積分:62 註冊:2002-04-14 發送簡訊給我 |
謝謝 小弟的意思是在設計資料庫之初,我忘了設定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 發送簡訊給我 |
引言:
__________________________________________________________
小弟的意思是在設計資料庫之初,我忘了設定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 發送簡訊給我 |
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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |