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