2016-06-24 2 views
0

У меня проблема, с которой я не мог решить проблему с Google. Я получил таблицу a с номером строк и параметром. Теперь я хочу, чтобы удалить дубликаты строк с тем же параметром для каждого номера:Удалить Дублировать строки при группировке другого

Number Parameter id 
3   22   1 
3   22   2 
2   32   3 
1   44   4 
2   12   5 
4   22   6 
1   44   7 
2   12   8 
2   36   9 

в

Number Parameter id 
3   22   1 
2   32   3 
1   44   4 
2   12   5 
4   22   6 
2   36   9 

Я попытался

DELETE n1 FROM a n1,a n2 WHERE n1.parameter = n2.parameter AND n1.id > n2.id AND n1.id <> n2.id

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

EDIT: О, я пропустил, чтобы добавить строку ID. Конечно, каждая строка имеет строку ID, которую я сейчас добавлю.

EDIT2: ответ от 10086 работал!

+0

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

+0

Как andre_northwind sais, невозможно удалить одну из строк, которые являются точно такими же. Вам нужна хотя бы одна дополнительная колонка. Можете ли вы изменить схему таблицы? – lvoros

ответ

0

Попробуйте следующее;)

DELETE t1 
FROM a t1 
INNER JOIN a t2 
ON t1.id > t2.id 
AND t1.Parameter = t2.Parameter 
AND t1.Number = t2.Number; 

SQLFiddle DEMO HERE

Это останется строка с наименьшим значением идентификатора.

+0

EDIT: вы отредактировали свой пост, дайте мне попробовать. – Baldry

+0

@Baldry Обновлено, повторите попытку. И проверьте демоверсию SQLFiddle. – Blank

+0

Работал как шарм Спасибо вам большое! мне придется заглянуть в данные, чтобы быть уверенными, но это кажется правильным. – Baldry

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