полное удаление дубликатов
В таблице остались ненужные данные с одинаковыми задвоенными картами, к примеру :
fio cards login
Пупкин Пупка 333 user1
Пупкин Леха 333 user2
Соколова Ирина 444 user33
Иванова Дина 444 user4
Козлова Михаил 555 user5
Козлова Михаил 555 user7
Сахаров Иван 666 user10
Смирнова Ольга 777 user12
как лучше удалить все данные у которых совпадение по столбцу карты? что попадают под условие
SELECT cards, COUNT (*) AS Q
FROM Table
GROUP BY cards
HAVING COUNT (*) > 1
ORDER BY cards
Ответы (3 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Если удаляем все, то вот так
DELETE FROM
my_table
WHERE
cards IN (
SELECT
cards
FROM
my_table
GROUP BY
cards
HAVING
COUNT (*) > 1
)
Автор решения: Confireus
→ Ссылка
DELETE t1.*
FROM my_table t1
JOIN my_table t2 ON (t1.cards=t2.cards AND t1.login <> t2.login)
Проверил на SQLFiddle - работает. Важно, что не использует вложенных запросов
Автор решения: Denis Rubashkin
→ Ссылка
Удалить все дубликаты по cards:
;WITH cte AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY cards ORDER BY login) AS n
FROM my_table
)
DELETE cte WHERE n > 1