当我们在SQL表中有重复记录时,我们可能需要删除这些重复项。以下是一些实用的SQL删除重复项的方法:
方法1:使用DISTINCT
使用SELECT DISTINCT语句选择所有非重复记录,并将它们插入到新表中,然后将旧表重命名并将新表重命名为旧表名称。如下所示:
-- 将DISTINCT查询结果插入到新表中
SELECT DISTINCT *
INTO new_table
FROM original_table;
-- 重命名表
DROP original_table;
EXEC sp_rename 'new_table', 'original_table';
方法2:使用ROW_NUMBER()OVER函数
使用ROW_NUMBER()OVER函数确定每个行的排序序列,并删除序列号大于1的行。如下所示:
-- 删除重复项
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY column_name1, column_name2,...
ORDER BY (SELECT 1)
) AS rn
FROM table_name
)
DELETE FROM CTE
WHERE rn > 1;
请注意,PARTITION BY子句指定要删除重复记录的列,ORDER BY子句可以为空或为“(SELECT 1)”。
以下是两个使用方法2的示例:
示例1:
假设我们有以下表:
CustomerID | FirstName | LastName | Age |
---|---|---|---|
1 | John | Smith | 35 |
2 | Jane | Doe | 24 |
3 | John | Smith | 35 |
4 | Paul | Brown | 42 |
我们可以使用以下SQL删除重复项:
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY FirstName, LastName, Age
ORDER BY (SELECT 1)
) AS rn
FROM Customers
)
DELETE FROM CTE
WHERE rn > 1;
结果将是:
CustomerID | FirstName | LastName | Age |
---|---|---|---|
1 | John | Smith | 35 |
2 | Jane | Doe | 24 |
4 | Paul | Brown | 42 |
示例2:
假设我们有以下表:
Id | City | Country |
---|---|---|
1 | Beijing | China |
2 | Shanghai | China |
3 | Tokyo | Japan |
4 | Beijing | China |
我们可以使用以下SQL删除重复项:
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY City, Country
ORDER BY Id
) AS rn
FROM Cities
)
DELETE FROM CTE
WHERE rn > 1;
结果将是:
Id | City | Country |
---|---|---|
1 | Beijing | China |
3 | Tokyo | Japan |
2 | Shanghai | China |
希望以上内容能够解决你的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 删除重复项 - Python技术站