如果沒記錯, SQL 是用在relational database吧?
那table 怎麼可能有兩筆資料是一模一樣的?
同樣的insert動作做二次,就有二筆了啊!
================================================
寄信人:劉先章 From:David Liu(Liu,shian-Chang)
郵件地址(E-Mail):sc...@ms1.hinet.net
================================================
不知道還有沒有別的方法說 :P
漢堡 <sc...@ms1.hinet.net> 次寫入到主題
<33510dc0...@netnews.hinet.net>...
> 請問:
> 在Table中,有二筆資料是一模一樣的,請問要如何
> 下SQL來去除其中一筆??
> TKS!
Jye Lu <j...@db.csie.ncu.edu.tw> 次寫入到主題
<5iteug$ehk$1...@db.csie.ncu.edu.tw>...
> 漢堡 <sc...@ms1.hinet.net> wrote:
> > 同樣的insert動作做二次,就有二筆了啊!
>
> 正常情況下, DBMS應該不允許這樣的insert;
> 因為這會違反 integrity constraint
>
>
我只要不設Primary key,就不會有問題,您可以試試看!
事實上,在我的Table中,就是有這種情形,不然,我就不
會提出來問了!
>假設你的table為"x",裡面有個column叫"aa"
>1.首先create一個table去除重複的資料
> CREATE TABLE z
> AS SELECT *
> FROM x
> GROUP BY aa
select * 和 group by aa會互相違背,您可以試試看!
>2.刪除table "x"
> DROP TABLE x
>3.把table z 改回 table x
> RENAME z TO x
>
>不知道還有沒有別的方法說 :P
>
>
>漢堡 <sc...@ms1.hinet.net> 次寫入到主題
><33510dc0...@netnews.hinet.net>...
>> 請問:
>> 在Table中,有二筆資料是一模一樣的,請問要如何
>> 下SQL來去除其中一筆??
>> TKS!
其實,我是有一個方法,就是用bcp把資料全部抓下來,再
除去重複的資料,再用bcp把資料轉到tabl中!
但是這不是我想要的方法,我是希望直接用SQL指令來除
去相同的資料,請各位高手們,再給小弟一些建議吧!
謝謝!
假設你的table name=test2
其內僅二個欄位,t1 , t2 則.
select t1,t2 from test2 group by t1,t2 having count(t1)>1;
即可找出重複的資料;
至於要怎麼去除,則由你來控制cursor的移動來做到了!
不然,你可以用下法:
select t1,t2 dinst from test2;
則只會列出相同資料的一筆,然後將其放至另一個table中,再做處理即可....
--
※ 來源:台灣科技大學BBS(bbs.et.ntit.edu.tw) ◆來自: 140.118.38.202
>於 14 Apr 1997 14:28:32 GMT, Jye Lu <j...@db.csie.ncu.edu.tw> 的文章中提到:
>
>>漢堡 <sc...@ms1.hinet.net> wrote:
>>> 同樣的insert動作做二次,就有二筆了啊!
>>
>> 正常情況下, DBMS應該不允許這樣的insert;
>> 因為這會違反 integrity constraint
>>
>我只要不設Primary key,就不會有問題,您可以試試看!
>事實上,在我的Table中,就是有這種情形,不然,我就不
>會提出來問了!
>
我看過了很多 POST 好像......
其實我想可以比較簡單一點就是
1. Backup 原來那二筆資料中的隨便一筆
2. 二筆都 Delete 丟
3. Restore 剛才 Backup 的那筆
4. 完了
至於如何 Backup 其中一筆的做法你可用 GROUP BY 所有欄位的方法
例如
1. SELECT * INTO #TempTable FROM TableName WHERE ...... GROUP BY
column1, column2, column3........
2. DELETE TableName WHERE ......
3. INSERT TableName SELECT * FROM #TempTable
How about "SELECT DISTINCT * FROM [TABLE]" command?
That would ensure that every record in that table is distinct.
>用SQL的話, 可能只能把重覆資料的ROWID找出來, 再用苦工殺掉其中一筆.
>當然啦, 下次最好還是先設CONSTRAINT, 避免這個困擾.
咦!Table有ROWID這種東東嗎?要怎麼用?如果真有的話,就太好了!
可否再說明詳細些,謝謝!
這個方法有個缺點, group by aa 而沒有aggregation 運算是不行的,
你的方法應該是:
1. CREATE TABLE z
AS SELECT distinct *
FROM x
不過這樣仍有個缺點,就是當總資料筆數大的時候(幾十萬筆),很佔空間,
建議使用下列方式:
1. select distinct * into TMPTABLE from YOURTABLE
group by Col1,Col2.... <- 到可以識別出相同的row時
having count(*)>1
2. delete YOURTABLE
where COL1+COL2+... in <- 這裡若是數字類記得轉成文字免得算錯
(select distinct COL1+COL2+... from TMPTABLE)
3. insert YOURTABLE select * from TMPTABLE
4. drop TMPTABLE
希望管用......
--
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
在oracle 中,要這麼下....
select rowid,field1,field2.... from table.....
rowid一定不一樣!!
有 rowid 可用嗎?有的話,那就很簡單了。