【问题标题】:How do I delete a row from MySQL DB which is duplicated/如何从 MySQL DB 中删除重复的行/
【发布时间】:2017-03-30 23:55:21
【问题描述】:

我的“数据”表中有重复的行(每个客户每个日期两次)。

我想删除其中一个。

id - 主键

dat_id - 客户 ID

dat_date - 日期

运行这样的查询不会拆分两行,因此我可以清楚地看到它们并且我不能从那里删除它们:

SELECT
    dat_id, dat_date, COUNT(*)
FROM
    data
GROUP BY
    dat_id, dat_date
HAVING 
    COUNT(*) > 1

显然不能在每个上运行SELECT * FROM data WHERE dat_date='2016-11-16' AND dat_id=769 并删除其中一个结果。

我使用 PHPMyAdmin 来进行舒适的显示。

我可以运行什么查询来以简单的方式显示结果以删除它们,或者我可以运行什么查询来自动删除第二个重复数据?

【问题讨论】:

    标签: mysql duplicates sql-delete


    【解决方案1】:

    您需要使用 group by 来删除重复。除了找到的第一行:

    DELETE FROM Mytable 
    WHERE RowID NOT IN (SELECT MIN(RowID) 
                        FROM Mytable 
                        GROUP BY Col1,Col2,Col3)
    

    【讨论】:

    • 什么是 RowID?我不知道行ID是什么
    • Rowid 是您的寄存器 id,如果该 id 不在所有寄存器中,子查询将搜索。您在每个表中都有一个 id,即 rowid
    • RowID 在 MySQL 中不存在。在这种情况下,如果您将 dat_id 替换为 RowID,则该解决方案将起作用。您只需将“and dat_date = '2016-11-16'”添加到查询中。实际上,对于两者,否则您将运行一个很长的查询。
    【解决方案2】:

    如果您确定所有行都有多个数据,请执行以下操作:

    SELECT row_id FROM tbl_name GROUP BY col, col, col

    获得行 ID 后,您可以像这样删除:

    DELETE FROM tbl_name WHERE row_id IN (the_row_ids_gotten_above)

    或者你在一个查询中编写它,因为你使用的是 PHPMYADMIN

    DELETE FROM tbl_name WHERE row_id IN (SELECT row_id FROM tbl_name GROUP BY user_id)

    编辑: 对于那天(2016-11-16)的人,请执行以下操作:

    DELETE FROM tbl_name WHERE date = '2016-11-16' AND row_id IN (SELECT row_id FROM tbl_name GROUP BY user_id)

    注意:在尝试此操作之前请先备份,以确保安全,尽管它应该可以工作。

    【讨论】:

    • 问题是我不知道row_id是谁
    • row_id 应该等同于您表的伪 ID,我猜它是您表中的 id 字段。所以在我对id的回答中更改row_id
    • 我用屏幕截图编辑了我的问题。以防我不够清楚
    • 使用 ID(row_id 是一种 Oracleism)和“select min group by ...”仅适用于 UUID 或连接列不用作主键或数据本身的情况可以正确订购。然后问题就变成了找到正确的键来执行“最小/最大”,这可能是有问题的。
    • @RickSanchez 你可以复制粘贴这个:DELETE FROM data WHERE dat_date = '2016-11-16' AND id IN (SELECT id FROM data GROUP BY dat_id)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2017-10-11
    • 1970-01-01
    • 2011-03-17
    • 2014-08-17
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多