powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поиск дубликатов
10 сообщений из 10, страница 1 из 1
Поиск дубликатов
    #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
Поиск дубликатов
    #32421424
Roman Ignatiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.ibase.ru/devinfo/deldupes.htm
Индексы-то по полям у тебя есть?
...
Рейтинг: 0 / 0
Поиск дубликатов
    #32421425
Жмурик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо не так
Надо вывести список количеств всех наименований и наложить условие, чтоб это количество превышало единицу

что то типа

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

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

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

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

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

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


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