2014-08-29 5 views
0

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

DELETE FROM table WHERE column IN 
( 
select column from 
(
    SELECT MAX(column)as column FROM table 
    GROUP BY column 
    HAVING COUNT(*) > 2)as table 
) 

ли потому что у меня только один столбец в моей таблице?

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

ответ

0

Ваш запрос не удается из-за ограничений в MySQL. Просто перефразируйте его как join. Вот один из способов:

DELETE t 
    FROM table t LEFT JOIN 
    (SELECT MAX(column) as column 
    FROM table 
    GROUP BY column 
    ) tosave 
    ON t.column = tosave.column 
WHERE tosave.column is null; 

EDIT:

Упс. Я следовал структуре вашего запроса. Это не будет работать с одним столбцом. Вам нужно будет сделать это со временным столом и повторной вставкой:

create temporary table temptable as 
    select distinct column 
    from tablename; 

truncate table tablename; 

insert into tablename(column) 
    select column 
    from temptable; 
+0

Что означает «t»? и им немного смущает то, что вы написали в моем первом году обучения, поэтому я все еще ноб. – user3991643

+0

't' - псевдоним таблицы. Вы должны понимать, что это такое, это важная часть языка. –

+0

Спасибо, что я havnt выполнил ваш код еще, потому что у меня 300 000 записей, и я хочу попробовать его сначала, будет ли это проблемой, если у меня будет столько строк? – user3991643

0

Если у вас есть только один столбец, выбор дубликатов становится невозможным, поскольку SQL основан на множестве-логики.

Выбор отдельных значений очень прост: select distinct column from table. Вставить это в таблицу также легко: select * into newtable from (select distinct column from table)

Смежные вопросы