2015-02-19 4 views
0

У меня есть база данных с двойными данными, теперь я не хочу удалять двойные данные.sql удалить двойное значение

Я могу все готовы фильтр двойного значения с этим запросом:

SELECT model, count(model), max(product_id) as latest FROM sn1_product GROUP BY model HAVING COUNT(model) > 1 

Выход запроса, как следует:

http://puu.sh/g3vyQ/a10cbd0fec.png

Как я могу написать запрос на удаление которые удаляют последний идентификатор?

+0

А если есть галстук? – jarlh

+0

является 'product_id' уникальным? В контексте он выглядит одинаково для каждой модели. У вас есть ПК в этой таблице? – triclosan

+0

И если есть 3 или более строк с одинаковой моделью? – jarlh

ответ

1

А что-то вроде:

DELETE FROM `sn1_product` 
WHERE product_id IN (
    SELECT max(product_id) as latest FROM sn1_product 
    GROUP BY model HAVING COUNT(model) > 1 
) 

Однако некоторые базы данных (например: MySQL) имеют проблемы удаляемые из тех же таблиц, вы выбираете. Если у вас есть этот вопрос проверки ответа на вызов of this question

UPDATE: Обход из комментариев:

  1. Создать таблицу (reference)

    CREATE TABLE sn2_product AS 
    SELECT * FROM sn1_product; 
    
  2. Сохранить только то, что вам нужно (обратите внимание на функцию мин - info). ... - остальные поля. Не забудьте скопировать без дублирует

    INSERT INTO sn2_product 
    SELECT min(product_id),... FROM sn1_product 
        GROUP BY model HAVING COUNT(model) > 1 
    
    INSERT INTO sn2_product 
    SELECT * FROM sn1_product 
        GROUP BY model HAVING COUNT(model) = 1 
    

Надеется, что это помогает

+0

'product_id' должен быть уникальным, чтобы заставить его работать – triclosan

+0

@triclosan: да или идентификатор строки должен быть выбран в качестве первого значения (я думаю) – urban

+0

@urban запрос не работает ошибка, которую я получил : # 1093 - Вы не можете указать целевую таблицу 'sn1_product' для обновления в предложении FROM, как я могу это исправить? – justkidding96

0

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

Насколько я знаю, вы не можете удалять данные из запроса таблицы, удалять данные можно только в скрипте create table.

проблема с его фильтрацией по-прежнему вычисляется и просматривает двойные данные, поэтому требуется дополнительное время, которое нужно просто удалить, вместо этого вы можете использовать термин «отдельный», который будет захватывать только первый экземпляр каждого уникального значения.

Кроме того, в качестве дополнительной мысли не должно быть возможности создавать двойные данные в одной таблице, первичный ключ должен быть таким, чтобы двойные данные не были возможны.

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

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