Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как можно выбрать повторяющиеся записи из таблицы??? [D5, D6, IB6.x, Firebird]


Sirus ©   (2003-10-22 08:29:00) 

Привет Мастера... Есть вопрос: Как можно выбрать из таблицы записи у которых одно или несколько полей совпадают?
Я делаю так
select * from TABLE1 t
where (select count(*) from TABLE1
where FIELD1=t.FIELD1)>0
Все работает выборка производится ужасно долго...
Может есть другой путь???


Sirus   (2003-10-22 09:50:00) [1]

2 Zacho ©
Спасибо... теперь догнал... а то покоя не давал этот вопрос... :)))


Zacho   (2003-10-22 09:24:00) [2]


> Sirus © (22.10.03 09:20) [5]

Да нет, именно все записи. Так как одна запись со значением поля CODE, равном значению "текущей" записи, и с таким же RDB$DB_KEY, как и у "текущей" записи всяко существует, и это именно "текущая" запись и есть :-)


Johnmen   (2003-10-22 09:23:00) [3]

>Sirus © (22.10.03 09:20)

У тебя что-то с логикой...:)
А зачем такие названия полей ?


Sirus   (2003-10-22 09:20:00) [4]

Я знаю как правильно...
Просто я никак не пойму, почему если сделать t2.RDB$DB_KEY=t.RDB$DB_KEY то запрос выдает все записи...
По идее он же должен не выдавать ни одной записи...


Zacho   (2003-10-22 09:14:00) [5]


> Sirus © (22.10.03 09:08) [3]

Правильно так:
select * from CTL_ENTERPRISES t
where exists (select CODE from ctl_enterprises t2
where t2.CODE=t.CODE and t2.RDB$DB_KEY != t.rdb$db_key)


Sirus   (2003-10-22 09:08:00) [6]

Просто вопрос:
Извините, а почему данный запрос выдает все записи???

select * from CTL_ENTERPRISES t
where exists (select * from ctl_enterprises t2
where t2.CODE=t.CODE and t2.RDB$DB_KEY=t.rdb$db_key)


Zacho   (2003-10-22 08:40:00) [7]

См. http://www.ibase.ru/devinfo/deldupes.htm


Danilka   (2003-10-22 08:38:00) [8]

можно вот-так, например:

SELECT FIELD1, count(FIELD1)
FROM TABLE1
GROUP BY FIELD1
HAVING count(FIELD1)>1

Если есть индекс по полю FIELD1, то он будет использоваться.


Наверх

Титульная страница Поиск, карта сайта Написать письмо