1

我有一个位置 mysql db 包含 3 列

Country     State           City
US          California      Los Angeles
AU          Queensland      Brisbane
AU          Victoria        Southbank
AU          Queensland      Brisbane

如何删除mysql查询中的重复行?

DELETE FROM location WHERE country IN (
  SELECT * FROM table_name 
  GROUP BY country, state, city 
  HAVING COUNT(*) >
);

我试过这个查询,但没有用

4

4 回答 4

4

选择不同的行并将它们放在一个新表中:

CREATE TEMPORARY TABLE location_temp AS SELECT DISTINCT * FROM location

截断表:

DELETE FROM location;

从表中填充不同的值

INSERT INTO location(Country, State, City) SELECT Country, State, City FROM location_temp;

资源:http ://www.databasejournal.com/features/mysql/article.php/2201621/Deleting-Duplicate-Rows-in-a-MySQL-Database.htm

于 2013-08-17T11:31:59.537 回答
3

您的查询有很多问题:

DELETE FROM location
where country in (SELECT *
                  FROM table_name 
                  GROUP BY country, state, city 
                  having COUNT(*)>);

如:(1)您从子查询中返回多于一列,但仅与一列进行比较。(2) 比较后你没有数字。(3) 它指的是两个不同的表。

您的数据的结构方式(行上没有唯一的 id),很难确定要删除哪些行。我建议您改用该truncate方法。然后学习在每个表中放置一个自动递增的 id:

create temporary table tmpLocation as
    select country, state, city from location;

truncate table location;

insert into location(country, state, city)
    select distinct country, state, city
    from tmpLocation;

drop table tmpLocation;

在具有大量删除的大型表上,这也更有效。

于 2013-08-17T11:31:41.980 回答
1

你忘了提count(*)>1

DELETE FROM location
where country in (
SELECT *
FROM table_name 
GROUP BY country, state, city 
having COUNT(*)>1);

仅供您参考。您还可以使用ALTER IGNORE TABLE删除重复项。

像这样的东西: -

ALTER IGNORE TABLE location ADD UNIQUE INDEX (COLUMN1, COLUMN2)
于 2013-08-17T11:29:08.913 回答
1

您必须使用ALTER 查询删除重复的行

ALTER IGNORE TABLE location ADD UNIQUE INDEX index_name(Country, State, City);

或者otherwise您可以使用以下查询语法删除重复的行

DELETE
FROM table_name
WHERE col1 IN  (  
    SELECT MAX(col1)
    FROM tab_name
    GROUP BY col1, col2, col3, ....
    HAVING COUNT(*) > 1)
于 2013-08-17T11:30:58.797 回答