mySQL中的重复记录

时间:2012-02-03 14:17:45

标签: mysql

我有一个带有重复记录的mySQL数据库,如附图所示。

enter image description here

我要求查询删除基于日期+时间的所有重复记录,对于db中的所有表(foreachtables)

由于

5 个答案:

答案 0 :(得分:1)

你为此创建和STORED PROCEDURE怎么样?

 DELIMITER $$

 CREATE PROCEDURE `DeleteDup`()

     BEGIN
         -- Drops the table.
         DROP TABLE bad_temp;

         -- Creates a temporary table for distincts record.
         CREATE TABLE bad_temp(id INT, name VARCHAR(20));

         -- Selects distinct record and inserts it on the temp table
         INSERT INTO bad_temp(id,name) SELECT DISTINCT id,name FROM bad_table;

         -- Delete All Entries from the table which contains duplicate
         -- (you can add also condition on this)
         DELETE FROM bad_table;

         -- Selects all records from temp table and 
         -- inserts back in the orginal table
         INSERT INTO bad_table(id,name) SELECT id,name FROM bad_temp;

         -- Drops temporary table.
         DROP TABLE bad_temp;
     END$$

 DELIMITER ;

请将表名和列名更改为所需的架构。

所以当你完成STORED PROCEDURE的创建时,可以像这样使用它:

CALL DeleteDup();

答案 1 :(得分:1)

据我所知,你没有自动增量主键或外键。 如果你没有外键或关系的表,首先你可以列出你的所有表。之后,您可以创建一个表的时间“镜像”(例如,autogrill)。 然后你可以做:

INSERT INTO TemporalTable
SELECT DISTINCT 

INSERT INTO TemporalTable
SELECT Id, Date, Time FROM autogrill GROUP BY Id, Date, Time HAVING COUNT(*) > 1

TRUNCATE或DELETE FROM

没有位置,然后再用

重新放入数据
INSERT INTO autogrill
SELECT * FROM TemporalTable

如果您有主键,请注意。

答案 2 :(得分:0)

您可以使用此请求导出表格:

SELECT * FROM autogrill GROUP BY id

然后,清空您的表,并导入您之前创建的导出。我不知道另一种简单的方法就是只使用一个请求来删除重复的条目。

答案 3 :(得分:0)

执行此操作的一种简单方法是将所有不同记录复制到新表或导出中。然后删除原始表中的所有记录并将其复制回来。

答案 4 :(得分:0)

如果表具有源使用别名的自动增量,则导出NULL,例如:

INSERT INTO product
SELECT NULL,p.product_sku, 
                    p.product_s_desc, 
                    p.product_desc, 
                    p.product_thumb_image, 
                    p.product_full_image, 
                    p.product_tech_data, 
                    p.product_publish, 
                    p.product_weight, 
                    p.product_weight_uom, 
                    p.product_length, 
                    p.product_width, 
                    p.product_height, 
                    p.product_lwh_uom, 
                    p.product_url, 
                    p.product_in_stock, 
                    p.product_available_date, 
                    p.product_special, 
                    p.create_date, 
                    p.modify_date, 
                    p.product_name, 
                    p.attribute
FROM product AS p WHERE p.product_id=xxx;