SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.02.2016 15:49:09

cherry
Участник
Зарегистрирован: 24.02.2016
Сообщений: 2

Выборка с ограничением повторов по полю

Предположим есть таблица:

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

Спасибо.

Неактивен

 

#2 24.02.2016 17:46:19

cherry
Участник
Зарегистрирован: 24.02.2016
Сообщений: 2

Re: Выборка с ограничением повторов по полю

SELECT * FROM t t1 WHERE N>(SELECT count(*) FROM t t2 WHERE t1.tel =t2.tel and t2.id < t1.id ) ORDER BY id
 

где N=1..n
Запрос возвращает выборку с N ограничением на повторы.
Всем спасибо за участие.

Ищите и обрящете.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson