3 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
您需要一種區(qū)分行的方法。根據(jù)您的評(píng)論,您可以為此使用特殊的rowid列。
要通過(guò)保持最低的刪除重復(fù)rowid每(hash,d):
delete from YourTable
where rowid not in
(
select min(rowid)
from YourTable
group by
hash
, d
)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果添加主鍵不是一種選擇,則一種方法是將重復(fù)的DISTINCT存儲(chǔ)在臨時(shí)表中,從現(xiàn)有表中刪除所有重復(fù)的記錄,然后將記錄從臨時(shí)表中添加回原始表中。
例如(為SQL Server 2008編寫的,但是該技術(shù)對(duì)于任何數(shù)據(jù)庫(kù)都是相同的):
DECLARE @original AS TABLE([hash] varchar(20), [d] float)
INSERT INTO @original VALUES('A', 1)
INSERT INTO @original VALUES('A', 2)
INSERT INTO @original VALUES('A', 1)
INSERT INTO @original VALUES('B', 1)
INSERT INTO @original VALUES('C', 1)
INSERT INTO @original VALUES('C', 1)
DECLARE @temp AS TABLE([hash] varchar(20), [d] float)
INSERT INTO @temp
SELECT [hash], [d] FROM @original
GROUP BY [hash], [d]
HAVING COUNT(*) > 1
DELETE O
FROM @original O
JOIN @temp T ON T.[hash] = O.[hash] AND T.[d] = O.[d]
INSERT INTO @original
SELECT [hash], [d] FROM @temp
SELECT * FROM @original
我不確定sqlite是否具有ROW_NUMBER()類型函數(shù),但是如果這樣做,您還可以嘗試此處列出的一些方法:從沒(méi)有主鍵的SQL表中刪除重復(fù)的記錄
- 3 回答
- 0 關(guān)注
- 1104 瀏覽
添加回答
舉報(bào)