Mysql 使用SQL删除表中的重复记录
所以我有一个需要删除重复记录的情况。 这里的场景是我有5个关键字段。 4个字段为实际数据,第5个字段为自动生成的唯一编号。 因此,当我仅使用这4个字段来使用group检查计数时,我有大约400条记录的副本。但这些重复记录的唯一编号不同(我们可以删除唯一编号最大值的记录)。 有没有办法删除这些重复记录? 还有其他6个非主键字段,但仅供参考 比如说:Mysql 使用SQL删除表中的重复记录,mysql,sql,sql-server,sql-server-2008,Mysql,Sql,Sql Server,Sql Server 2008,所以我有一个需要删除重复记录的情况。 这里的场景是我有5个关键字段。 4个字段为实际数据,第5个字段为自动生成的唯一编号。 因此,当我仅使用这4个字段来使用group检查计数时,我有大约400条记录的副本。但这些重复记录的唯一编号不同(我们可以删除唯一编号最大值的记录)。 有没有办法删除这些重复记录? 还有其他6个非主键字段,但仅供参考 比如说: +----------+-------+---------+---------+-----------+ | Field | Field | F
+----------+-------+---------+---------+-----------+
| Field | Field | Field 3 | Field 4 | Unique,Id |
| 1 | 2 | | | |
+----------+-------+---------+---------+-----------+
| Batman | 100 | 50 | Chicago | 100 |
+----------+-------+---------+---------+-----------+
| Batman | 100 | 50 | Chicago | 101 |
+----------+-------+---------+---------+-----------+
| Superman | 50 | 50 | Florida | 102 |
+----------+-------+---------+---------+-----------+
| Flash | 90 | 40 | London | 103 |
+----------+-------+---------+---------+-----------+
| Flash | 90 | 40 | London | 104 |
+----------+-------+---------+---------+-----------+
在本例中,前4个字段是实际数据字段
所以你可以看到蝙蝠侠和flash有重复的值(对于前4个字段),但是唯一的id是不同的。所以在这里,我需要从每个记录中删除一条记录,这样它们就不会保留为重复记录。可以删除该重复记录的唯一id的最大值。所以102和104是蝙蝠侠和Flash的最大唯一id值,应该删除它们
请帮我做这件事。你可以用CTE来做
WITH cte as (
select
ROW_NUMBER() OVER ( PARTITION BY FIELD1 ORDER BY ID) FirstOcurrence,
*
from mySuperHeroTable
)
delete from cte where FirstOcurrence <> 1
你可以用CTE来做
WITH cte as (
select
ROW_NUMBER() OVER ( PARTITION BY FIELD1 ORDER BY ID) FirstOcurrence,
*
from mySuperHeroTable
)
delete from cte where FirstOcurrence <> 1
请尝试此查询:
DELETE
FROM
MYTABLE
FROM
MYTABLE
LEFT JOIN
(
SELECT
FIELD1,FIELD2,FIELD3,FIELD4,MIN(ID) AS ID
FROM
MYTABLE
GROUP BY
FIELD1,FIELD2,FIELD3,FIELD4
)TbMain
ON
MYTABLE.FIELD1=TbMain.FIELD1
AND
MYTABLE.FIELD2=TbMain.FIELD2
AND
MYTABLE.FIELD3=TbMain.FIELD3
AND
MYTABLE.ID =TbMain.ID
WHERE
TbMain.ID IS NULL
请尝试此查询:
DELETE
FROM
MYTABLE
FROM
MYTABLE
LEFT JOIN
(
SELECT
FIELD1,FIELD2,FIELD3,FIELD4,MIN(ID) AS ID
FROM
MYTABLE
GROUP BY
FIELD1,FIELD2,FIELD3,FIELD4
)TbMain
ON
MYTABLE.FIELD1=TbMain.FIELD1
AND
MYTABLE.FIELD2=TbMain.FIELD2
AND
MYTABLE.FIELD3=TbMain.FIELD3
AND
MYTABLE.ID =TbMain.ID
WHERE
TbMain.ID IS NULL
MySQL还是MS SQL Server?不要给不涉及的产品贴标签。无论哪个数据库管理系统,这是一个非常古老的问题,如果搜索的话很容易找到。讽刺的是,一个“重复”的问题被标记为重复!MySQL还是MS SQL Server?不要给不涉及的产品贴标签。无论哪个数据库管理系统,这是一个非常古老的问题,如果搜索的话很容易找到。讽刺的是,一个“重复”的问题被标记为重复!我们不应该按所有四个字段进行分区吗?这将只保留第一个蝙蝠侠行和第一个flash行(按ID排序(ASC))。当然超人排是独一无二的,我理解。事实上,读到这个问题,我想可能有超过1行的字段1蝙蝠侠,但字段2、3和4的值不同。我们可能希望保留它们,作为一个整体,行不会重复。但无论如何,看起来这里不是这样。Parsu只希望有一行有蝙蝠侠,与字段2、3和4中的值无关。我们不应该按所有四个字段进行分区吗?这将只保留第一个蝙蝠侠行和第一个flash行(按ID排序(ASC))。当然超人排是独一无二的,我理解。事实上,读到这个问题,我想可能有超过1行的字段1蝙蝠侠,但字段2、3和4的值不同。我们可能希望保留它们,作为一个整体,行不会重复。但无论如何,看起来这里不是这样。无论字段2、3和4中的值如何,Parsu只希望蝙蝠侠有一行。