|
Одиночные/многотаблицные запросы SQL удаляют дублирующиеся записи Отдельная таблица - 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) не работают!!
|