2012-02-03 138 views
0

我有一个mySQL数据库具有重复的记录,从附加的图像。mySQL中的重复记录

enter image description here

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

感谢

+0

看一看这个问题 - http://stackoverflow.com/questions/9093151/removing-duplicate-data- from-a-table-using-mysql/9093456#9093456 – Devart 2012-02-03 14:23:40

+0

这个答案会帮你做你想做的事情:http://stackoverflow.com/a/3312098/489560 – 2012-02-03 14:25:43

回答

1

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

INSERT INTO TemporalTable 
SELECT DISTINCT 

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

截断或DELETE FROM

没有在那里,然后再次把你的数据与

INSERT INTO autogrill 
SELECT * FROM TemporalTable 

要知道,如果你有主键这样做。

0

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

SELECT * FROM autogrill GROUP BY id 

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

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(); 
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;