Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка повторяющихся записей / 25 сообщений из 37, страница 1 из 2
15.07.2003, 15:20
    #32208498
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Необходимо из таблицы Interbase выбрать и вывести все записи с одинаковым значением одного из полей.
Таких значений может быть несколько...но нужны они все
То есть по сути, нужны те записи, где любое значение FIELD1 встречается в таблице больше одного раза...
...
Рейтинг: 0 / 0
15.07.2003, 15:24
    #32208507
Даниил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Погляди тут:\r
/topic/38634
...
Рейтинг: 0 / 0
15.07.2003, 15:33
    #32208529
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Посмотрела..немного не то....Хотя вопрос аналогичный

SELECT * FROM TABLE T1
WHERE (SELECT COUNT(*)
FROM TABLE T2
WHERE T1.FIELD = T2.FIELD) > 1

В моем случае T2.FIELD это и есть T1.FIELD.... и мне нужны дубликаты в пределах одной таблицы....
Вот допустим, есть таблица с контингентом работников, так из нее надо выбрать всех двойников....То есть в результате выполнения запроса должно получиться следующее:

Иванов Иван Иванович 1970
Иванов Иван Иванович 1965
Петрова Марфа Васильевна 1955
Петрова Марфа Васильевна 1967
Сидоров Василий Иванович 1977
Сидоров Василий Иванович 1937
...
Рейтинг: 0 / 0
15.07.2003, 15:44
    #32208554
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Попробуй так:

select name, count(*)
from table1
group by name
having count(*) > 1
...
Рейтинг: 0 / 0
15.07.2003, 15:52
    #32208573
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Я делаю так:

select * from sptvr a
where (select count(b.id) from sptvr b where a.namtvr = b.namtvr) > 1
order by a.namtvr

Таким образом выбираются записи с ОДИНАКОВЫМ значением поля NAMTVR
таблицы SPTVR
...
Рейтинг: 0 / 0
15.07.2003, 16:03
    #32208602
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Сделала так:
select fam
from table
group by fam
having count (fam) > 1

Сработало...Всем спасибо
...
Рейтинг: 0 / 0
15.07.2003, 16:44
    #32208693
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Рано обрадовалась...:(
Записи выводятся только по одному разу....
...
Рейтинг: 0 / 0
15.07.2003, 16:51
    #32208710
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Настаиваю на

select * from table
where (select count(b.id) from table b where a.fam = b.fam) > 1
order by a.fam

Выбираются ВСЕ повторяющиеся записи
...
Рейтинг: 0 / 0
15.07.2003, 16:52
    #32208712
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Sorry, я чуть-чуть ошибся. Правильно так:

select * from table a
where (select count(b.id) from table b where a.fam = b.fam) > 1
order by a.fam
...
Рейтинг: 0 / 0
15.07.2003, 16:55
    #32208718
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Так табличка то у меня всего одна....
...
Рейтинг: 0 / 0
15.07.2003, 17:02
    #32208738
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Можно одну таблицу использовать в запросе с разными псевдонимами, что и используется. Попробуйте, потом продолжим разговор.
...
Рейтинг: 0 / 0
15.07.2003, 17:08
    #32208754
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
select * from ab
where abfam in (select abfam from ab
group by abfam
having count (abfam) > 1)
and abname in(select abname from ab
group by abname
having count (abname) > 1)
and abotch in(select abotch from ab
group by abotch
having count(abotch) > 1)
order by abfam

Вот так все работает!!))
...
Рейтинг: 0 / 0
15.07.2003, 17:09
    #32208759
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Ой! Как тяжело все это будет работать на большой базе ...
...
Рейтинг: 0 / 0
15.07.2003, 17:12
    #32208764
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Если есть предложения, то выслушаю...Как сие можно оптимизировать?
...
Рейтинг: 0 / 0
15.07.2003, 17:15
    #32208774
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
При наличии ключа по полю NAMTVR в таблице SPTVR у меня запрос

select * from sptvr a
where (select count(b.id) from sptvr b where a.namtvr = b.namtvr) > 1
order by a.namtvr

работает доли секунды на таблице с 7100 записями
...
Рейтинг: 0 / 0
15.07.2003, 17:24
    #32208783
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Катерина!

А почему не подходит вариант Timujin ?

Мне кажется самый логичный.
...
Рейтинг: 0 / 0
15.07.2003, 17:25
    #32208784
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
И мне
...
Рейтинг: 0 / 0
15.07.2003, 17:26
    #32208786
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Так Я его вариант и взяла :) Только под себя чуть-чуть подогнала....просто у меня три поля....которые должны полностью совпадать
...
Рейтинг: 0 / 0
15.07.2003, 17:28
    #32208789
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
select * from sptvr a
where (select count(b.id) from sptvr b where a.namtvr = b.namtvr and a.xxx = b.xxx and a.yyy = b.yyy and ...) > 1
order by a.namtvr
...
Рейтинг: 0 / 0
15.07.2003, 17:45
    #32208815
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Вот кажется еще один вариант, но через ХП (очень быстрый, т.к. проходов по записям мало)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
begin

 for select field1 from tables group by field1, ... having count(field1) >  1  into :field1
 do
   for select field1, ... from tables where field1 = :field1 into ....
 do suspend;

end
...
Рейтинг: 0 / 0
16.07.2003, 16:24
    #32209998
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Всем спасибо! :))
...
Рейтинг: 0 / 0
19.07.2003, 16:29
    #32212807
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Спасибо, Timujin
Воспользовалась твоим советом и написала:

select * from ab
where (select count(ab.abfam) from ab where ab.abfam = ab.abfam and ab.abfam = ab.abfam and ab.abname = ab.abname) > 1
order by ab.abfam

Работает НАМНОГО быстрее, чем то, что предложила Я сама....
Огромное спасибо еще раз:))
...
Рейтинг: 0 / 0
19.07.2003, 16:42
    #32212810
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Поторопилась обрадоваться....

Пишу так...

select abfam,abname,abotch,fckey,sckey from ab
where (select count(ab.abfam) from ab where ab.abfam = ab.abfam and ab.abname = ab.abname and ab.abotch = ab.abotch) > 1
order by ab.abfam, ab.abname, ab.abotch

Но выбирается не совсем то, что нужно....Вернее среди выбранных полей на самом деле есть нужные мне записи, но встречаются и те, которых быть не должно....
...
Рейтинг: 0 / 0
21.07.2003, 09:37
    #32213138
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Обратите внимание на ПСЕВДОНИМЫ таблиц в запросе.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select PSEVD1.abfam,PSEVD1.abname,PSEVD1.abotch,
         PSEVD1.fckey,PSEVD1.sckey 
from ab PSEVD1
where (select count(PSEVD2.abfam) from ab PSEVD2 
          where PSEVD2.abfam = PSEVD1.abfam 
            and PSEVD2.abname = PSEVD1.abname 
            and PSEVD2.abotch = PSEVD1.abotch) >  1  
order by PSEVD1.abfam, PSEVD1.abname, PSEVD1.abotch 
...
Рейтинг: 0 / 0
21.07.2003, 16:09
    #32213731
Катерина
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка повторяющихся записей
Тогда вопрос такой....
Как обратиться к одной и той же таблице, но с разными псевдонимами?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка повторяющихся записей / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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