SQL | Удаление дубликатов без отличий

Опубликовано: 30 Ноября, 2021

DISTINCT полезен в определенных обстоятельствах, но у него есть недостаток, заключающийся в том, что он может увеличить нагрузку на механизм запросов для выполнения сортировки (поскольку ему необходимо сравнить набор результатов с самим собой, чтобы удалить дубликаты).

Ниже приведены альтернативные решения:

1. Удалите дубликаты, используя номер строки.

 С CTE (Col1, Col2, Col3, DuplicateCount)
В ВИДЕ
(
  ВЫБЕРИТЕ Col1, Col2, Col3,
  ROW_NUMBER () OVER (РАЗДЕЛЕНИЕ ПО столбцу 1, столбцу 2,
       Col3 ORDER BY Col1) AS DuplicateCount
  ИЗ MyTable
) SELECT * from CTE, где DuplicateCount = 1

2.Удаление дубликатов с помощью самостоятельного соединения
YourTable

 emp_name emp_address sex matial_status  
уууу эи мс
iiii iii fs
уууу эи мс
ВЫБЕРИТЕ emp_name, emp_address, sex, marital_status
из YourTable a
ГДЕ НЕ СУЩЕСТВУЕТ (выберите 1 
         из YourTable b
         где b.emp_name = a.emp_name и
               b.emp_address = a.emp_address и
               b.sex = a.sex и
               b.create_date> = a.create_date)

3. Удалите дубликаты с помощью группы «По».
Идея состоит в том, чтобы сгруппировать по всем столбцам, которые будут выбраны при выводе. Например, если мы хотим напечатать уникальные значения «FirstName, LastName и MobileNo», мы можем просто сгруппировать их по всем трем.

 ВЫБЕРИТЕ FirstName, LastName, MobileNo
ОТ ЗАКАЗЧИКА
ГРУППИРОВАТЬ ПО имени, фамилии, мобильному номеру;
SQL