Intereting Posts
Есть ли один запрос, который может обновлять «порядковый номер» для нескольких групп? В ormlite, как я могу иметь поле foriegn и полевой столбец? SQL Query, который возвращает таблицу, в которой каждая строка представляет дату в заданном диапазоне уникальные значения в столбце, но только уникальные для каждого связанного внешнего ключа В Oracle запускается предложение WHERE SQL Query с 1 = 1 полезным? Создать таблицу в sql-выражении с помощью executeUpdate в Mysql Как просмотреть все таблицы в базе данных HSQLDB? SQL Server, где поле int? Получите mySQL MONTH (), чтобы использовать ведущие нули? Исключение MS SQL: неправильный синтаксис рядом с '@ P0' Вычисляемые поля в SQL-запросе SQLite: эффективный способ сбросить множество строк получение значений, которые не существуют в таблице mysql Есть ли причина, которую я выбираю строковыми столбцами, которые содержат SHA1 hexdigests? Как генерируется оракула?

удалять повторяющиеся записи в таблице

Я хочу удалить несколько дубликатов ключей из таблицы ниже:

id | name | uid 1 | ekta | 5 2 | ekta | 5 3 | sharma | 10 4 | sharma | 10 

хотите, чтобы это было похоже

 id | name | uid 1 | ekta | 5 3 | sharma | 10 

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

Один из способов сделать это – присоединить таблицу к подзапросу с помощью LEFT JOIN . Подзапрос получает самый низкий ID для каждого UID . Если в подзапросе нет записи, это означает, что она не имеет соответствующей записи и может быть безопасно удалена.

 DELETE a FROM TableName a LEFT JOIN ( SELECT uid, MIN(ID) min_ID FROM TableName GROUP BY uid ) b ON a.uid = b.uid AND a.ID = b.min_ID WHERE b.uid IS NULL 
  • Демоверсия SQLFiddle

Однако, если записи UID могут иметь другое имя, тогда вам нужно включить name в предложение group by , иначе останется только уникальный uid с наименьшим ID .

 DELETE a FROM TableName a LEFT JOIN ( SELECT uid, MIN(ID) min_ID, name FROM TableName GROUP BY uid, name ) b ON a.uid = b.uid AND a.ID = b.min_ID AND a.name = b.name WHERE b.uid IS NULL 
  • Демоверсия SQLFiddle
  • SQLFiddle Demo ( тот же uid с другим именем )
  DELETE DupRows.* FROM MyTable AS DupRows INNER JOIN ( SELECT MIN(ID) AS minId, col1, col2 FROM MyTable GROUP BY col1, col2 HAVING COUNT(*) > 1 ) AS SaveRows ON SaveRows.col1 = DupRows.col1 AND SaveRows.col2 = DupRows.col2 AND SaveRows.minId <> DupRows.ID;