Удаление повторяющихся строк из таблицы - PullRequest
8 голосов
/ 28 сентября 2011
id     lat                long     speed      date          address
 1    22.92138131   72.44103313     3.96 km/h     2011-09-26  National, Gujarat, India
 2    22.92138145   72.44103413     13.96 km/h     2011-09-26  National, Gujarat, India
 3    22.92138134   72.44103423     15.96 km/h     2011-09-26  National, Gujarat, India
 4    22.92138454   72.44103233     13.96 km/h     2011-09-26  10t ring Rd, Nehru Nagar
 5    22.92138354   72.44102533     13.96 km/h     2011-09-26  Anandnagar Rd, Ahmedabad
 6    22.92138484   72.44103293     19.96 km/h     2011-09-26  Anandnagar Rd, Ahmedabad

Я хочу написать запрос так, чтобы мой результат выглядел так:

id     lat                long     speed      date          address
 1    22.92138131   72.44103313     3.96 km/h     2011-09-26  National, Gujarat, India
 4    22.92138454   72.44103233     13.96 km/h     2011-09-26  10t ring Rd, Nehru Nagar
 5    22.92138354   72.44102533     13.96 km/h     2011-09-26  Anandnagar Rd, Ahmedabad

Я хочу удалить повторяющиеся строки в соответствии с адресом.

Ответы [ 6 ]

9 голосов
/ 28 сентября 2011

Чтобы проверить, что вы собираетесь удалить:

SELECT distinct t1.*
  FROM yourtable as t1
  join yourtable as t2
 WHERE t1.address = t2.address
   and t1.id < t2.id

Если вас это устраивает:

DELETE t1
  FROM yourtable as t1
  join yourtable as t2
 WHERE t1.address = t2.address
   and t1.id < t2.id

Таким образом, вы сохраняете запись с максимальным значением в столбце id

4 голосов
/ 28 сентября 2011

Если вам все равно, какой из рядов вы храните

ALTER IGNORE TABLE table ADD UNIQUE KEY 'address' (`address`);

«IGNORE» имеет важное значение, что означает молчаливое игнорирование дублирующихся данных. (т.е. игнорирует его при вставке в «новую версию» таблицы.)

Может захотеть убрать указатель Afterwoods

ALTER TABLE table DROP KEY 'address';
2 голосов
/ 28 сентября 2011

Необходимо создать дублирующую / временную таблицу с тем же полем, что и у текущей таблицы.

Затем выполнить ниже SQL

Первая очистить временную таблицу:

DELETE FROM `#TMP_TABLE#`;

Вставитьзапись во временную таблицу в соответствии с вашими ожиданиями.

INSERT INTO `#TMP_TABLE#`
SELECT T . *
FROM #TABLE# T
INNER JOIN (
    SELECT MIN( ID ) AS ID
    FROM #TABLE#
    GROUP BY address
    ) SUB ON T.id = SUB.id

Усечение основной таблицы

DELETE FROM `#TABLE#`;

Копирование данных из временной таблицы

INSERT INTO #TABLE# SELECT * FROM  `#TMP_TABLE#`
2 голосов
/ 28 сентября 2011

Предполагая, что вы хотите вернуть строки с наименьшими значениями идентификатора:

SELECT 
    *
FROM
TABLENAME T INNER JOIN
(
    SELECT MIN(ID) AS ID FROM TableName 
    GROUP BY Address
) SUB ON T.ID = SUB.ID
0 голосов
/ 28 сентября 2011

Вы можете сделать это легко, выполнив эти 3 простых шага и, следовательно, 3 оператора SQL:

Шаг 1: Переместите недубликаты (уникальные кортежи) во временную таблицу CREATE TABLE new_table как SELECT * FROM old_table WHERE1 GROUP BY [столбец для удаления дубликатов по];

Шаг 2: удалить удалить старую таблицу Нам больше не нужна таблица со всеми дублирующимися записями, поэтому оставьте ее!DROP TABLE old_table;

Шаг 3: переименуйте new_table в имя old_table RENAME TABLE new_table TO old_table;

По другому пути Вы можете перейти по ссылке ниже ... Это такжеХороший путь ... Сложно, но с меньшими утверждениями http://dev.mysql.com/doc/refman/5.0/en/insert.html

0 голосов
/ 28 сентября 2011
delete from table_name tb where id not in 
   (select min(id) from table_name tb1 group by address)

Я предположил, что вы хотите удалить строки с дублированием адресов и хотите сохранить в таблице минимальную строку идентификатора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...