борьба с дубликатами записей

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

борьба с дубликатами записей

Сообщение DSKalugin » 25 фев 2005, 19:32

есть запрос, который выводит максимальное значение индекса у повтояющихся записей.

Код: Выделить всё

CREATE TABLE "OriginalNumbers" (
    "cod"           INTEGER NOT NULL,  /*первичный индекс*/
    "id_dnb"        INTEGER NOT NULL,
    "O_NumberName"  VARCHAR(30) NOT NULL,
    "Firma"         INTEGER default 1 NOT NULL
);

SELECT max(n."cod")
FROM "OriginalNumbers" n
group by n."id_dnb", n."O_NumberName", n."Firma"
having count(*)>1
Как проще всего удалить содержимое этой выборки?
Пробую так

Код: Выделить всё

delete from "OriginalNumbers" o 
where exists
(
SELECT max(n."cod")
FROM "OriginalNumbers" n
group by n."id_dnb",
  n."O_NumberName",
  n."Firma"
having (count(*)>1) and  max(n."cod")=o."cod"
)
Но зависло не подецки. Плюнул и сорвал после 15мин ожидания. Домой пора

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 фев 2005, 20:25

www.ibase.ru/devinfo/deldupes.htm

ох, чую, попадись мне еще один такой любитель двойных кавычек в подворотне, я ему покажу, какие мы добрые и гуманные :wink:

причем не могу взять в толк - вроде все новые и новые люди с этим появляются, а в IBExpert уже давно по умолчанию все в uppercase делается, пока одну галочку не снимешь.
Или это утомительный секс по незнанию особенностей 3-го диалекта?

p.s. чуть не забыл - ни в коем случае при delete в подзапросе нельзя использовать select first 1. удалится все напрочь. см. release notes от FB 1.5.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 26 фев 2005, 15:14

Спасибо, помогло за 15 сек управился. Взял на вооружение.
Предыдущий мой вариант с временной таблицей, куда я поместил ненужные ID длился 57мин. Забыл проиндексировать это единственное поле во временной таблице, так бы быстро шурануло.
В таблице всего 600 тыс, а дубликатов было 6,5 тыс

А по поводу двойных кавычек - по наследству стиль остался от предыдущих деятелей. Раздражает когда все в верхнем регистре. Такое впечатление, что на меня кричат с экрана. Привых называть объекты и переменные SellCod, InputNo.
Так как без кавычек сделать, чтобы мне в коде делфи и в ИБЭксперте использовать названия в первостепенном виде с разным регистром?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 фев 2005, 18:43

никак. привыкни лучше к КРИЧАЛКАМ :-) тем более что писать свой sql ты можешь хоть select field from table, select Field From Table или select FIELD FROM TABLE. это БЕЗ двойных кавычек.
мне вот наоборот, двойные кавычки ужасно мешают, рябит в глазах от них...

Ответить