sql怎么重復(fù)記錄只保留一條

sql
小億
82
2024-10-27 01:09:48
欄目: 云計(jì)算

在SQL中,如果你想要?jiǎng)h除重復(fù)的記錄,但只保留其中一條,你可以使用以下方法:

  1. 使用DELETEJOIN語(yǔ)句:

假設(shè)你有一個(gè)名為my_table的表,其中有id(主鍵)、column1column2列,你想要?jiǎng)h除重復(fù)的column1column2組合,但只保留每組的第一條記錄。你可以使用以下查詢:

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;

這個(gè)查詢會(huì)刪除所有重復(fù)的記錄,但只保留每組的第一條記錄。

  1. 使用ROW_NUMBER()窗口函數(shù):

你還可以使用ROW_NUMBER()窗口函數(shù)來實(shí)現(xiàn)這個(gè)目標(biāo)。假設(shè)你的表名為my_table,你想要?jiǎng)h除重復(fù)的column1column2組合,但只保留每組的第一條記錄。你可以使用以下查詢:

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;

這個(gè)查詢首先使用ROW_NUMBER()函數(shù)為每組重復(fù)的記錄分配一個(gè)行號(hào),然后刪除所有行號(hào)大于1的記錄,從而只保留每組的第一條記錄。

0