Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поиск дубликатов / 10 сообщений из 10, страница 1 из 1
25.02.2004, 17:15
    #32421406
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
Необходимо выдать все записи, имеющие дубликаты в некоторых полях. Нарисовал
Код: plaintext
1.
select a.* from  "Certif"  a where a. "ObjectName"  in (select b. "ObjectName"  from  "Certif"  b group by b. "ObjectName"  having count(*)> 1 )

и вот на табличке с ~20 тыс. висит собака уже с пол-часа...

Plan
PLAN SORT ((B NATURAL))
PLAN (A NATURAL)

Adapted Plan
PLAN SORT ((B NATURAL)) PLAN (A NATURAL)

че где можно подкрутитЪ?
_________________
"Hello, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
25.02.2004, 17:24
    #32421424
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
http://www.ibase.ru/devinfo/deldupes.htm
Индексы-то по полям у тебя есть?
...
Рейтинг: 0 / 0
25.02.2004, 17:24
    #32421425
Жмурик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
Надо не так
Надо вывести список количеств всех наименований и наложить условие, чтоб это количество превышало единицу

что то типа

select name
from tbl
group by name
having count(name) > 1
...
Рейтинг: 0 / 0
25.02.2004, 17:27
    #32421430
Жмурик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
Прикольно получилось
Получился твой подзапрос в скобках
...
Рейтинг: 0 / 0
25.02.2004, 17:28
    #32421433
Жмурик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
А нет, не совсем
count(*) это не то что count(name)
...
Рейтинг: 0 / 0
25.02.2004, 18:01
    #32421471
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
Roman Ignatiev
Индексы-то по полям у тебя есть?

да есть PK, тока ж, ессесно, не по этим полям...

это идет ревизия перед конвертированием БД, и таких проверяемых полей...
К каждому индекса прикручивать?
_________________
"Hello, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
25.02.2004, 18:22
    #32421501
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
Это уж сам смотри :) НАмек: можешь считать, что rdb$db_key проиндексирован
...
Рейтинг: 0 / 0
25.02.2004, 18:30
    #32421518
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
Построй индекс по Certif.ObjectName и попробуй перепсать запрос заново с агрегатными функциями, по возможности, как тебе посоветовали:

select ObjectName,MAX(...),MAX(...),...
from Certif
group by ObjectName
having count(*)>1
...
Рейтинг: 0 / 0
25.02.2004, 22:47
    #32421694
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
лично я уверен, что в having использовать индекс невозможно.

например, нужно же для каждого поля найти этот каунт, чтобы его с единицей стравнить - вот и натурал...
...
Рейтинг: 0 / 0
26.02.2004, 11:01
    #32422056
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск дубликатов
feddлично я уверен, что в having использовать индекс невозможно.

например, нужно же для каждого поля найти этот каунт, чтобы его с единицей стравнить - вот и натурал...
Сначала по индексу делается group by, а потом для каждой записи набора который получился по тому же индексу делается count() который в having. Конечно эти два поцесса должны быть совмещены в целях оптимизации, и должены делатся за один проход по индексу.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поиск дубликатов / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]