|
Одиночні/багатотаблицьні запити SQL видаляють дублікати записів Відмінність однієї таблиці - select distinct 字段 from 表
Копія коду
Багато голосів групуються за Група за має бути розміщена перед порядком за та limit, інакше буде зафіксовано помилку ************************************************************************************ 1. Знайдіть дубловані записи в таблиці, і дублікати записів оцінюються за одним полем (peopleId). вибрати * з людей де peopleId у (виберіть peopleId з групи людей за людьмиId з count(peopleId) > 1) 2. Видалити дублікатні записи в таблиці, і дублікати оцінюються за одним полем (peopleId), залишаючи лише записи з найменшим rowid Видалити з людей де peopleId у (виберіть peopleId з групи людей за людьмиId з count(peopleId) > 1) і rowid не в (виберіть min(rowid) з групи людей за peopleId має count(peopleId)>1) 3. Знайдіть резервні дублікати записів (кілька полів) у таблиці Вибрати * з vitae a де (a.peopleId,a.seq) у (select peopleId,seq з vitae group by peopleId,seq мають count(*) > 1) 4. Видаліть зайві дублікати записів (кілька полів) у таблиці, залишивши лише записи з найменшим рядковим номером Видалити з vitae a де (a.peopleId,a.seq) у (select peopleId,seq з vitae group by peopleId,seq мають count(*) > 1) і rowid не входить (вибирати min(rowid) з групи vitae за peopleId,seq з count(*)>1) 5. Знайдіть у таблиці надлишкові дублікати записів (кілька полів) і не містять записів з найменшим рядковим значенням Вибрати * з vitae a де (a.peopleId,a.seq) у (select peopleId,seq з vitae group by peopleId,seq мають count(*) > 1) і rowid не входить (вибирати min(rowid) з групи vitae за peopleId,seq з count(*)>1)
(два) Наприклад У таблиці A є поле «name», І значення «name» може бути однаковим для різних записів, Тепер потрібно звертатися до предметів із дубльованими значеннями «імені» між записами в таблиці; Виберіть Name,Count(*) з групи за назвою, що має 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 кінець Close cur_rows Встановіть кількість рядків 0 Метод 2 «Дубльовані записи» мають два значення дублікатних записів: одне — це повністю дубльований запис, тобто запис з усіма дубльованими полями, а інший — запис із дубльованими частинами ключових полів, наприклад, дубльоване поле Ім'я, тоді як інші поля не обов'язково дубльовані або можуть бути проігноровані. 1. Для першого типу повторення його відносно легко розв'язати та використовувати select distinct * з tableName Ви можете отримати набір результатів без дублікатів записів. Якщо потрібно видалити дублікати записів (зберегти 1 дублікатний запис), ви можете видалити їх наступним чином виберіть distinct * у #Tmp з tableName таблиця drop tableНазва вибрати * у таблицюІм'я з #Tmp Drop table #Tmp Це дублювання виникає через погану структуру таблиць і може бути вирішене додаванням унікальних індексних стовпців. 2. Такий тип задачі дублювання зазвичай вимагає збереження першого запису в дублікатному записі, і метод роботи виглядає так: Припустимо, що є дублікати полів Ім'я та Адреса, і вам потрібно отримати унікальний набір результатів для цих двох полів виберіть identity(int,1,1) як autoID, * у #Tmp з tableName виберіть min(autoID) як autoID у #Tmp2 з #Tmp групи за ім'ям, autoID виберіть * з #Tmp, де знаходиться autoID (виберіть autoID з #tmp2) Останній вибір отримує набір результатів Ім'я та Адреса, які не повторюються (але є додаткове поле autoID, яке можна записати у клаузу select під час фактичного запису) (4) Запити дублюються Виберіть * з назви таблиці, де id у (виберіть ID з назви таблиці група за id маючи count(id) > 1 ) 3. Знайдіть резервні дублікати записів (кілька полів) у таблиці Вибрати * з vitae a де (a.peopleId,a.seq) у (select peopleId,seq з vitae group by peopleId,seq мають count(*) > 1) Запуск спричинятиме проблеми, а запис і надсилання таких моментів (a.peopleId, a.seq) не працюватимуть!!
|