| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > Удаление дубликатов |
| Автор: Akella 15.12.2006, 10:40 | ||||
В базе есть 2 связанные таблицы.![]() Проблема в том, что хочу составить запрос, который удалит дубликаты из левой таблицы. Нужно удалить все названия "Аверс", оставить только одну любую запись, не важно какую. Все телефоны из правой таблицы, которые на всех удаляемых "Аверс`ах" перенести на ту, запись, которую оставляем. Таких повторений много, поэтому нужно это сделать в цикле, в хранимке. Левая таблица
Правая таблица
Таблицы связаны по ключу. Как видно из скриптов, по полям PHONES.ID_MEDIATOR и MEDIATORS.ID |
| Автор: Romkin 15.12.2006, 11:12 |
| 1. for select Посредники, min(ID) 2. в цикле update для телефонов set ID = <minID> где их ID in (select ID from Посредники where Посредник = <переменная>) 3. все, осталось удалить дублирующихся посредников. Примеры запросов есть на ibase.ru Так достаточно? |
| Автор: Akella 15.12.2006, 12:11 | ||
| наверное Добавлено @ 12:22 вроде оно
|
| Автор: Akella 15.12.2006, 12:57 |
| не, Romkin, ты не прав хотябы вот этим |
| Автор: Romkin 15.12.2006, 13:27 | ||||
| Почему? Это ты неизвестно чего делаешь своим запросом Поле обновляешь тем же значением
Подзапрос возвращает четко только значения NEW_VAR Вот так примерно должно быть:
Советую индексировать m.name - будет быстрее |
| Автор: Akella 15.12.2006, 14:52 |
| спасибо, с меня + |