หากการเพิ่มคีย์หลักไม่ใช่ตัวเลือกวิธีการหนึ่งคือการจัดเก็บ DISTINCT ที่ซ้ำกันในตารางชั่วคราวลบระเบียนที่ซ้ำกันทั้งหมดจากตารางที่มีอยู่จากนั้นเพิ่มระเบียนกลับเข้าไปในตารางเดิมจากตารางชั่วคราว .
ตัวอย่างเช่น (เขียนสำหรับ SQL Server 2008 แต่เทคนิคเหมือนกันสำหรับฐานข้อมูลใด ๆ ):
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()
ฟังก์ชัน type หรือไม่ แต่ถ้าเป็นเช่นนั้นคุณสามารถลองใช้วิธีการบางอย่างที่ระบุไว้ที่นี่: ลบระเบียนที่ซ้ำกันจากตาราง SQL โดยไม่มีคีย์หลัก