在SQL中,如果你想要刪除重復的記錄,但只保留其中一條,你可以使用以下方法:
DELETE
和JOIN
語句:假設你有一個名為my_table
的表,其中有id
(主鍵)、column1
和column2
列,你想要刪除重復的column1
和column2
組合,但只保留每組的第一條記錄。你可以使用以下查詢:
DELETE t1 FROM my_table t1
JOIN my_table t2
ON t1.column1 = t2.column1 AND t1.column2 = t2.column2 AND t1.id > t2.id;
這個查詢會刪除所有重復的記錄,但只保留每組的第一條記錄。
ROW_NUMBER()
窗口函數:你還可以使用ROW_NUMBER()
窗口函數來實現這個目標。假設你的表名為my_table
,你想要刪除重復的column1
和column2
組合,但只保留每組的第一條記錄。你可以使用以下查詢:
WITH ranked_table AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS row_num
FROM my_table
)
DELETE FROM ranked_table
WHERE row_num > 1;
這個查詢首先使用ROW_NUMBER()
函數為每組重復的記錄分配一個行號,然后刪除所有行號大于1的記錄,從而只保留每組的第一條記錄。