Mysql 删除sql中的重复项:您可以';t指定目标表';表';for update in FROM子句
我想从mysql表中删除所有重复记录。我正在尝试,但我有以下错误: 不能在FROM子句中为update指定目标表“maTable” 关于这一点,我已经看到了另一个主题,但我想让你们看看我的查询有什么错,以及我如何才能使它工作Mysql 删除sql中的重复项:您可以';t指定目标表';表';for update in FROM子句,mysql,sql,Mysql,Sql,我想从mysql表中删除所有重复记录。我正在尝试,但我有以下错误: 不能在FROM子句中为update指定目标表“maTable” 关于这一点,我已经看到了另一个主题,但我想让你们看看我的查询有什么错,以及我如何才能使它工作 DELETE FROM maTable WHERE id_table IN (SELECT id_table FROM maTable GROUP by id_table HAVING COUNT(id_table)>1)
DELETE
FROM maTable
WHERE id_table IN (SELECT id_table
FROM maTable GROUP by id_table
HAVING COUNT(id_table)>1)
这是MySQL中的一个限制。一种解决方法是使用
连接
:
DELETE m
FROM maTable m JOIN
(SELECT id_table, COUNT(*) as cnt
FROM maTable
GROUP BY maTable
) mm
ON mm.id_table = m.id_table
WHERE cnt > 1;
如果要删除除一个以外的所有重复项(即保留其中一个值),则最好使用某种类型的唯一列,例如创建日期:
DELETE m
FROM maTable m LEFT JOIN
(SELECT id_table, min(creation_date) as mincd
FROM maTable
GROUP BY maTable
) mm
ON mm.id_table = m.id_table AND m.creation_date = mm.mincd
WHERE mm.id_table IS NULL;
这是MySQL中的一个限制。一种解决方法是使用
连接
:
DELETE m
FROM maTable m JOIN
(SELECT id_table, COUNT(*) as cnt
FROM maTable
GROUP BY maTable
) mm
ON mm.id_table = m.id_table
WHERE cnt > 1;
如果要删除除一个以外的所有重复项(即保留其中一个值),则最好使用某种类型的唯一列,例如创建日期:
DELETE m
FROM maTable m LEFT JOIN
(SELECT id_table, min(creation_date) as mincd
FROM maTable
GROUP BY maTable
) mm
ON mm.id_table = m.id_table AND m.creation_date = mm.mincd
WHERE mm.id_table IS NULL;
尝试将
中的查询包装到子查询中:
DELETE
FROM maTable
WHERE id_table IN (
SELECT id_table
FROM (SELECT id_table
FROM maTable
GROUP by id_table
HAVING COUNT(id_table)>1) AS t)
尝试将中的查询包装到子查询中:
DELETE
FROM maTable
WHERE id_table IN (
SELECT id_table
FROM (SELECT id_table
FROM maTable
GROUP by id_table
HAVING COUNT(id_table)>1) AS t)
@JulienBlanchard您不正确-Count(id\u table)
使用Group by id\u table
将返回id\u table
的出现次数。它并不总是1。请注意,您并不是只删除重复项,而是删除所有具有重复项的行。这可能是您想要的,也可能不是您想要的。@Luaan这就是我想要的,我在临时表中记录了一个副本,然后通过此查询删除所有具有副本的行,并在我的表中之后将数据插入临时表中maTable@JulienBlanchard您不正确-计数(id\u表)
使用分组依据id\u表
将返回id\u表
的出现次数。它并不总是1。请注意,您并不是只删除重复项,而是删除所有具有重复项的行。这可能是您想要的,也可能不是您想要的。@luan这就是我想要的,我在一个临时表中记录了一个重复项,然后通过此查询删除所有有重复项的行,并在我的表maTable之后在临时表中插入数据