Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 14609|Отговор: 0

[Бакшиши] SQL Как да направите заявка към таблица, за да премахнете дубликати

[Копирай линк]
Публикувано в 9.10.2014 г. 11:03:04 ч. | | |

SQL заявките за единични/многотаблици премахват дублирани записи

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

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

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

Група по трябва да се постави преди подреждане по и лимит, в противен случай ще бъде докладвана грешка

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

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

Избери * от хора
където peopleId в (изберете peopleId от people group по peopleId с брой(peopleId) > 1)

2. Изтрийте излишните дублиращи се записи в таблицата и дублиращите се записи се оценяват по едно поле (peopleId), като останат само записите с най-малък rowid
Изтрий от хора
където peopleId в (изберете peopleId от people group по peopleId с брой(peopleId) > 1)
и rowid не е в (изберете min(rowid) от групата на хората по peopleId има брой(peopleId) >1)

3. Намерете излишни дублиращи се записи (множество полета) в таблицата
Изберете * от Vitae A
където (a.peopleId,a.seq) в (select peopleId,seq от vitae group by peopleId,seq with count(*) > 1)

4. Изтрийте излишните дублиращи се записи (множество полета) в таблицата, като останете само записите с най-малък ред
Изтрийте от Vitae A
където (a.peopleId,a.seq) в (select peopleId,seq от vitae group by peopleId,seq with count(*) > 1)
и rowid не е в (изберете min(rowid) от vitae group по peopleId,seq с count(*)>1)


5. Намерете излишни дублиращи се записи (множество полета) в таблицата и не съдържат записи с най-малък ред
Изберете * от Vitae A
където (a.peopleId,a.seq) в (select peopleId,seq от vitae group by peopleId,seq with count(*) > 1)
и rowid не е в (изберете min(rowid) от vitae group по peopleId,seq с count(*)>1)

(две)
Например
В таблица А има поле "име",
И стойността на "името" може да е една и съща между различните записи,
Сега трябва да правите заявки за елементи с дублирани "имена" стойности между записи в таблицата;
Изберете Име,Брой(*) от група по име с Count(*) > 1

Ако и полът е същият, то е както следва:
Изберете Име, пол, Брой(*) от група по име, пол Има брой(*) > 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
край

Близо cur_rows

Задай брой редове 0

Метод 2

"Дублиращи се записи" имат две значения на дублиращи се записи – едното е напълно дублиращ се запис, тоест запис с дублирани всички полета, и другото е запис с дублирани части от ключови полета, като например полето Name, докато други полета не са непременно дублирани или могат да бъдат игнорирани.

1. За първия тип повторение е сравнително лесен за решаване и използване

select distinct * от tableName

Можете да получите набор от резултати без дублирани записи.

Ако трябва да изтриете дублиращи се записи (да запазите един дублиран запис), можете да ги изтриете по следния начин

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

таблица с таблица с падане Име

изберете * в таблица Име от #Tmp
Drop table #Tmp

Това дублиране се случва поради лош дизайн на таблиците и може да бъде решено чрез добавяне на уникални индексни колони.

2. Този тип проблем с дублиране обикновено изисква да се запази първият запис в дублиращия се запис, а методът на работа е следният

Да предположим, че има дублиращи се полета Име и Адрес и трябва да получите уникален набор от резултати за тези две полета

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

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

изберете * от #Tmp където е включено autoID (изберете autoID от #tmp2)

Последният select получава набор от резултати от Име и Адрес, които не се повтарят (но има допълнително поле 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)

Бягането ще създаде проблеми, а писането и изпращането на места (a.peopleId, a.seq) няма да работят!!






Предишен:SQL създава съхранени процедури с параметри
Следващ:EPUBReader четец, задължителен за отваряне на EPUB файлове
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com