Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 14609|Відповідь: 0

[Чайови] SQL Як зробити запит до таблиці для видалення дублікатів

[Копіювати посилання]
Опубліковано 09.10.2014 11:03:04 | | |

Одиночні/багатотаблицьні запити SQL видаляють дублікати записів

Відмінність однієї таблиці

  1. 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) не працюватимуть!!






Попередній:SQL створює збережені процедури з параметрами
Наступний:EPUBReader reader — необхідний інструмент для відкриття EPUB-файлів
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com