Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除MySQL中的重复行?_Mysql - Fatal编程技术网

如何删除MySQL中的重复行?

如何删除MySQL中的重复行?,mysql,Mysql,我试图从表中删除重复的行 这是我的问题 delete t1 from TT t1 , TT t2 where t1.id < t2.id and t1.url = t2.url 删除t1 从TT t1 ,TT t2 其中t1.id

我试图从表中删除重复的行

这是我的问题

delete t1 
  from TT t1
     , TT t2 
 where t1.id < t2.id 
   and t1.url = t2.url
删除t1
从TT t1
,TT t2
其中t1.id
这里id是主键,url在表TT中具有唯一键。您一定想知道为什么会有具有唯一索引的重复行

实际上它确实发生了,我不知道为什么,但现在我想先删除重复的行。我可以在phpmyadmin中运行查询,但根本不会删除重复的行(TT表中有重复的行)

原因可能是什么?谢谢

您可以使用ROW_NUMBER()删除重复项

;WITH cte AS (
    SELECT *
        , ROW_NUMBER OVER(PARTITION BY url ORDER BY url) AS rn
    FROM TT
)
DELETE FROM cte 
WHERE rn > 1
您可以使用ROW_NUMBER()删除重复项

;WITH cte AS (
    SELECT *
        , ROW_NUMBER OVER(PARTITION BY url ORDER BY url) AS rn
    FROM TT
)
DELETE FROM cte 
WHERE rn > 1

实际上,甚至在使用我已经发布的查询之前,我也尝试在查询中使用join。下面是一个查询,[code]从TT t1内部连接TT t2删除t1,其中t1.id1[/code]的url从TT组中选择url它确实返回了重复的url。谢谢。如果你真的有重复的唯一索引,那么这似乎比如何删除它们更大的问题。你永远无法信任你的数据。顺便说一下。如果我将鼠标移到查询上,phpmyadmin确实显示有一个错误“意外令牌(t1附近)”。但我仍然能够运行查询,但它只是不删除重复的行。所以我只是想知道,看起来很无辜的查询是否语法不正确,尤其是在phpmyadmin中?实际上,在使用我已经发布的查询之前,我也尝试在查询中使用join。下面是一个查询,[code]从TT t1内部连接TT t2删除t1,其中t1.id1[/code]的url从TT组中选择url它确实返回了重复的url。谢谢。如果你真的有重复的唯一索引,那么这似乎比如何删除它们更大的问题。你永远无法信任你的数据。顺便说一下。如果我将鼠标移到查询上,phpmyadmin确实显示有一个错误“意外令牌(t1附近)”。但我仍然能够运行查询,但它只是不删除重复的行。所以我只是想知道,看起来很无辜的查询是否语法不正确,尤其是在phpmyadmin中?请注意,窗口函数需要MySQL 8.0.2,但并非所有人都升级过。请注意,窗口函数需要MySQL 8.0.2,但并非所有人都升级过。