Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 删除sql中的重复项:您可以';t指定目标表';表';for update in FROM子句_Mysql_Sql - Fatal编程技术网

Mysql 删除sql中的重复项:您可以';t指定目标表';表';for update in FROM子句

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)

我想从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)

这是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之后在临时表中插入数据