我有一个带有重复记录的mySQL数据库,如附图所示。
我要求查询删除基于日期+时间的所有重复记录,对于db中的所有表(foreachtables)
由于
答案 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;