Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 14609|Ответ: 0

[Чаевые] SQL Как сделать запрос к таблице для удаления дубликатов

[Скопировать ссылку]
Опубликовано 09.10.2014 11:03:04 | | |

Одиночные/многотаблицные запросы SQL удаляют дублирующиеся записи

Отдельная таблица

  1. select distinct 字段 from 表
Копирование кода

Многие голоса группируются по

Группа по должна быть поставлена перед порядком по и лимитом, иначе будет зафиксирована ошибка

************************************************************************************

1. Найдите дублирующиеся записи в таблице, и дублирующиеся записи оцениваются по одному полю (peopleId).

выбрать * из людей
где peopleId в (выберите peopleId из группы людей по peopleId с count(peopleId) > 1)

2. Удалять избыточные дублирующие записи в таблице, и дублирующиеся записи оцениваются по одному полю (peopleId), оставляя только записи с наименьшим rowid
Удалить из людей
где peopleId в (выберите peopleId из группы людей по peopleId с count(peopleId) > 1)
и rowid not in (выберите min(rowid) из группы людей по peopleId, имея count(peopleId) >1)

3. Найдите избыточные дублирующиеся записи (несколько полей) в таблице
Выбрать * из vitae a
где (a.peopleId,a.seq) в (select peopleId,seq из vitae group by peopleId,seq with count(*) > 1)

4. Удалить избыточные дублирующие записи (несколько полей) в таблице, оставив только записи с минимальным rowid
Удалить из vitae a
где (a.peopleId,a.seq) в (select peopleId,seq из vitae group by peopleId,seq with count(*) > 1)
и rowid не входит в (выбирайте min(rowid) из группы vitae по peopleId,seq с count(*)>1)


5. Найти избыточные дублирующие записи (несколько полей) в таблице, не содержащие записи с наименьшим rowid
Выбрать * из vitae a
где (a.peopleId,a.seq) в (select peopleId,seq из vitae group by peopleId,seq with count(*) > 1)
и rowid не входит в (выбирайте min(rowid) из группы vitae по peopleId,seq с count(*)>1)

(два)
Например
В таблице A есть поле «name»,
И значение «name» может быть одинаковым для разных записей,
Теперь нужно запросить элементы с дублирующими значениями «имени» между записями в таблице;
Выберите Name,Count(*) из группы по названию Count(*) > 1

Если пол тоже одинаковый, то это выглядит следующим образом:
Выберите Имя, пол, Count(*) из группы по имени,Пол с Count(*) > 1

(три)
Метод 1

объявить @max целое число @id целое число

объявить cur_rows локальный курсор для выбранного основного поля, count(*) из группы названий таблицы по основному полю с count(*) >; 1

Открытый cur_rows

Принеси cur_rows в @id,@max

в то время как @@fetch_status=0

Начало

выбрать @max = @max -1

Установить количество строк @max

Удалить из имени таблицы, где основное поле = @id

Принеси cur_rows в @id,@max
Конец

Close cur_rows

Установите количество строк 0

Метод 2

«Дублирующиеся записи» имеют два значения дубликатных записей: одно — полностью дублированная запись, то есть запись с дублированными всеми полями, а другая — запись с дублирующимися частями ключевых полей, например, дублируется поле Name, в то время как другие поля не обязательно дублируются или могут быть проигнорированы.

1. Для первого типа повторения его относительно легко решать и использовать

выбрать distinct * из tableName

Вы можете получить набор результатов без дублированных записей.

Если вам нужно удалить дублирующие записи (сохранить одну дубликатную запись), вы можете удалить их следующим образом

выберите distinct * в #Tmp из tableName

таблица выпадающей таблицы Название

выберите * в tableName из #Tmp
Drop table #Tmp

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

2. Такой тип задачи дублирования обычно требует сохранения первой записи в дублирующей записи, и метод работы выглядит следующим

Предположим, что есть дублирующиеся поля Имя и Адрес, и вам нужно получить уникальный набор результатов для этих двух полей

выберите identity(int,1,1) как autoID, * в #Tmp из tableName

выберите min(autoID) как autoID в #Tmp2 из #Tmp группы по названию, autoID

выберите * из #Tmp, где входит autoID (выберите autoID из #tmp2)

Последний выбор получает набор результатов Name and Address, которые не повторяются (но есть дополнительное поле autoID, которое можно записать в клаузу select при фактическом записи)

(4)
Запросы дублируются

выберите * из имени таблицы, где id в (выберите id из названия таблицы

группа по id

имея count(id) > 1

)

3. Найдите избыточные дублирующиеся записи (несколько полей) в таблице
Выбрать * из vitae a
где (a.peopleId,a.seq) в (select peopleId,seq из vitae group by peopleId,seq with count(*) > 1)

Запуск вызовет проблемы, а запись и отправка в стиле where(a.peopleId, a.seq) не работают!!






Предыдущий:SQL создаёт хранящиеся процедуры с параметрами
Следующий:EPUBReader reader — необходимый инструмент для открытия файлов EPUB
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com