полное удаление дубликатов

В таблице остались ненужные данные с одинаковыми задвоенными картами, к примеру :

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
  )

SQLFiddle

→ Ссылка
Автор решения: 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
→ Ссылка