Страница 1 из 1

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

Добавлено: 25 фев 2005, 19:32
DSKalugin
есть запрос, который выводит максимальное значение индекса у повтояющихся записей.

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

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мин ожидания. Домой пора

Добавлено: 25 фев 2005, 20:25
kdv
www.ibase.ru/devinfo/deldupes.htm

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

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

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

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

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

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