Предположим есть таблица:
DROP TABLE IF EXISTS t;
CREATE TABLE t (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`a` varchar(3) ,
`tel` varchar(12) ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
insert into t values
(1, 'a1', '111-11-11'),
(2, 'a2', '222-22-22') ,
(3, 'a3', '111-11-11') ,
(4, 'a4', '333-33-33') ,
(5, 'a5', '333-33-33') ,
(6, 'a6', '111-11-11') ,
(7, 'a7', '222-22-22') ,
(8, 'a8', '333-33-33') ,
(9, 'a9', '444-44-44') ;
Необходимо убрать(перенести в другую таблицу) из таблицы t лишние записи в соответствии со следующими критериями:
1.В таблице разрешены записи с одним номером телефона, т.е. телефон встречается 1 раз.
С этим вроде понятно
SELECT * FROM `t` GROUP BY tel
Осталось (1, 'a1', '111-11-11') уходят записи (3, 'a3', '111-11-11')
(2, 'a2', '222-22-22') (5, 'a5', '333-33-33')
(4, 'a4', '333-33-33') (6, 'a6', '111-11-11')
(9, 'a9', '444-44-44') (7, 'a7', '222-22-22')
(8, 'a8', '333-33-33')
2.В таблице разрешены записи, где номер телефона повторяется не более 2-х раз
Осталось (1, 'a1', '111-11-11') уходят записи (6, 'a6', '111-11-11')
(2, 'a2', '222-22-22') (8, 'a8', '333-33-33')
(3, 'a3', '111-11-11') (9, 'a9', '444-44-44')
(4, 'a4', '333-33-33')
(5, 'a5', '333-33-33')
(7, 'a7', '222-22-22')
Ну и в общем случае, где номер телефона повторяется не более N раз.
Пытался реализовать следующим образом. Сначала выбираем уникальные
SELECT * FROM `t` GROUP BY tel копируем их во временную таблицу и удаляем в основной. Затем опять выбираем уникальные и повторяем копирование и удаление.
Просьба состоит в том, что нужно составить запрос, который выберет все записи у которых в поле "tel" встречаются повторы не более N раз. В случае, когда N=1 это будет
SELECT * FROM t GROUP BY tel
Спасибо.