1.先找出重複的資料有哪些,重複多少筆
2.給予整個資料表一個 IDENTITY ,用來區分出既使資料重複,也有一個欄位不同。
3.再將有重複的資料排序好厚新增到暫存的資料表
4.透過 DELETE 指令,以暫存的資料表的serial(剛剛建立出來的Identity)取餘數的方式就能找到唯一的serial 來Delete重複的資料。
詳細請看下面之前寫下來的說明,野人獻曝,還請大家多多指教。
這是比較早之前協助朋友發生的問題,是當資料表內重複的資料完全都一樣,
要把重複的資料,只要保留一筆就好的方式,
用的方法蠻硬幹的,整個處理的流程是
1.先找出重複的資料有哪些,重複多少筆
2.給予整個資料表一個 IDENTITY ,用來區分出既使資料重複,也有一個欄位不同。
3.再將有重複的資料排序好厚新增到暫存的資料表
4.透過 DELETE 指令,以暫存的資料表的serial(剛剛建立出來的Identity)取餘數的方式就能找到唯一的serial
來Delete重複的資料。
詳細請看下面之前寫下來的說明,野人獻曝,還請大家多多指教。
// 解決DB 中大內資料重複的問題又沒有任何件可以判斷的欄位問題
1.先下TSQL找出重複有多少資料
SELECT DISTINCT A1,A2,Count(*) AS 重複比數
FROM Table1
GROUP BYA1,A2
having COUNT(*) > 1
欄位都一樣的重複
ALTER TABLE iboard
ADD serial INT IDENTITY
3.因此有了不同的seria.
4.找出有重複的資料群
SELECT DISTINCT(Board_ID),serial FROM iboard
WHERE board_id
IN (select board_id from iboard group by board_id having count(*)>1)
order by board_ID
--5.為了只選其中一個所有要再度編號 創立一個暫時純放的TABLE
DECLARE @TempDB TABLE
(no int IDENTITY(1,1),
bid varchar(50),
serial int
) -6.把資料排序後INSERT到tempDB
INSERT tempDB (bid,serial)
SELECT DISTINCT(Board_ID),serial FROM iboard
WHERE board_id
IN (select board_id from iboard group by board_id having count(*)>1)
order by board_ID
-- 7.可以看到他依序的排好
SELECT * FROM TempDB
--所以只要取餘數的方式就能找到唯一的serial 來Delete重複的table
--8. 刪除重複的Table方法
DELETE iBoard WHERE serial IN (
SELECT serial FROM TempDB
WHERE (no % 2 ) = 0 )
--9.把剛才增加的欄位刪除掉
ALTER TABLE iboard
DROP serial