powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка повторяющихся записей
37 сообщений из 37, показаны все 2 страниц
Выборка повторяющихся записей
    #32208498
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо из таблицы Interbase выбрать и вывести все записи с одинаковым значением одного из полей.
Таких значений может быть несколько...но нужны они все
То есть по сути, нужны те записи, где любое значение FIELD1 встречается в таблице больше одного раза...
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32208507
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погляди тут:\r
/topic/38634
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #32208554
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:

select name, count(*)
from table1
group by name
having count(*) > 1
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #32208602
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделала так:
select fam
from table
group by fam
having count (fam) > 1

Сработало...Всем спасибо
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32208693
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рано обрадовалась...:(
Записи выводятся только по одному разу....
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #32208718
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так табличка то у меня всего одна....
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32208738
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно одну таблицу использовать в запросе с разными псевдонимами, что и используется. Попробуйте, потом продолжим разговор.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #32208759
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой! Как тяжело все это будет работать на большой базе ...
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32208764
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если есть предложения, то выслушаю...Как сие можно оптимизировать?
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #32208783
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Катерина!

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

Мне кажется самый логичный.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32208784
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И мне
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32208786
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так Я его вариант и взяла :) Только под себя чуть-чуть подогнала....просто у меня три поля....которые должны полностью совпадать
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #32209998
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо! :))
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #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
Выборка повторяющихся записей
    #32213731
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда вопрос такой....
Как обратиться к одной и той же таблице, но с разными псевдонимами?
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213779
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Псевдонимы таблиц в запросе - это обозначения таблиц только в этом конкретном запросе и они (псевдонимы) могут быть какими угодно и для любых таблиц и процедур. Например,
SELECT C.CITY FROM CITIES C WHERE C.POPULATION < 1000000,
где C - псевдоним таблицы CITIES

SELECT A.NAMTVR FROM PROC_NAKL(:ID) A,
где A - псевдоним для хранимой процедуры PROC_NAKL

В предыдущем сообщении

Код: 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 


PSEVD1 и PSEVD2 - это и есть псевдонимы для одной и той же таблицы <ab>.
В данном запросе нужно, чтобы одна и та же таблица была открыта как-бы два раза для нахождения записей, у которых
Код: plaintext
1.
2.
            PSEVD2.abfam = PSEVD1.abfam 
            and PSEVD2.abname = PSEVD1.abname 
            and PSEVD2.abotch = PSEVD1.abotch
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213824
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо....Все работает :)
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213831
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Катерина, либо Вы не захотели подумать и дополнить мой первоначальный вариант, либо незаметили или невнимательно проанализировали вариант Dnico, который доработал его за Вас, либо в этом форуме неправильно поставили задачу.

Задачу Вы сформулировали, насколько я понял, следующим образом:
Вытащить все повторяющиеся записи столько раз сколько они повторяются.
Причём у этих записей могут совпадать сразу три поля:
abfam, abname, abotch .
К тому-же критична скорость выполнения на большой БД.

Ну так что-же Вам мешает воспользоваться предложенной Dnico хранимой процедурой.
Если Вам непонятен его текст в общем виде, привожу в конкретном.

create procedure SP_PROC
returns(
id_out integer,
fam_out varchar(n1),
name_out varchar(n2),
otch_out varchar(n3)
)as
declare variable
fam varchar(n1);
declare variable name varchar(n2);
declare variable otch varchar(n3);
begin

for select s1.abfam, s1.abname, s1.abotch, count(*)
from spr s1
group by s1.abfam, s1.abname, s1.abotch
having count(*) > 1
into :fam, :name, :otch
do
for select s2.id, s2.abfam, s2.abname, s2.abotch
from spr s2
where (s2.abfam = :fam)
and (s2.abname = :name)
and (s2.abotch = :otch)
into :id_out, :fam_out, :name_out, :otch_out
do
suspend;

end


Поскольку здесь нет подзапросов - выполняется быстро.
Вариант Timujin тоже хорош, когда совпадение по одному полю.
У Вас их несколько. Поэтому N подзапросов впоследствии неудобно будет анализировать. К тому-же работать N будет медленне, чем 1 или 2.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213837
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока непонятен. Не буду скрывать....
Буду разбираться....
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213848
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zmeishe
>> Вариант Timujin тоже хорош, когда совпадение по одному полю.

Мой вариант работает, когда совпадение по любому кол-ву полей Ж:(
См. выше на запросы
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32214103
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timujin
>> Мой вариант работает, когда совпадение по любому кол-ву полей Ж:(

В том, что работает нисколько не сомневаюсь.

Но N подзапросов проанализировать, например через год будет сложно. Тем более, если будешь заниматься уже другой задачей и придётся вновь дорабатывать эту. Или если вместо тебя эту задачу будет сопровождать другой программист.

for select
...
do
for select
...
do
читается и анализируется легче чем

select
...
where (select .... where)
and (select .... where)

Смысл термина 'читабельность', ещё никто не отменял.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32214129
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zmeishe
К критике отношусь положительно, но тут я не согласен. Какой код понятнее:

Zmeishe
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create procedure SP_PROC 
returns( 
id_out integer, 
fam_out varchar(n1), 
name_out varchar(n2), 
otch_out varchar(n3) 
)as 
declare variable fam varchar(n1); 
declare variable name varchar(n2); 
declare variable otch varchar(n3); 
begin 
for select s1.abfam, s1.abname, s1.abotch, count(*) 
from spr s1 
group by s1.abfam, s1.abname, s1.abotch 
having count(*) >  1  
into :fam, :name, :otch 
do 
for select s2.id, s2.abfam, s2.abname, s2.abotch 
from spr s2 
where (s2.abfam = :fam) 
and (s2.abname = :name) 
and (s2.abotch = :otch) 
into :id_out, :fam_out, :name_out, :otch_out 
do 
suspend; 

end 


или 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 


Если я не прав, напиши мне, ALL
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выборка повторяющихся записей
    #39030176
wh1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wh1
Гость
друзья, помогите, не могу разобраться. Прочитал, попытался сделать как тут, не выходит... Проблема следующая:

1. Есть таблица, в которую заносятся данные о выплатах с проекта, а именно ник пользователя (user) и кошелек (purse)
2. В таблицу заносятся изо дня в день выплаты, и ник может повторяться.
3. Необходимо найти те ники пользователей, которые заносят выплаты на одинаковые кошельки. Поиск мультиаккаунтов. Нужен запрос.

Мучился ппц сколько. Получается не особо хорошо, то выводит список всех выплат, то не выводит вообще. Запрос использовал следующий:

$db->Query("SELECT *, db_payment.purse upurse FROM db_payment WHERE purse IN (SELECT purse FROM db_payment GROUP BY purse HAVING COUNT(*) > 1) ORDER BY purse ");

выводит примерно так:


а надо так:



То есть показать не все выплаты на эти кошельки, а только по одной записи, если такие встречаются.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030232
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wh1,

если я тебя правильно понял то это должно помочь:
Код: plsql
1.
select user, purse from db_payment group by user, purse having count(*)>1



Такие древние топики не стоит поднимать, хотя задача и похожа немного.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030327
wh1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wh1
Гость
stelvicwh1,

если я тебя правильно понял то это должно помочь:
Код: plsql
1.
select user, purse from db_payment group by user, purse having count(*)>1



Такие древние топики не стоит поднимать, хотя задача и похожа немного.

Спасибо, но не помогло (( Посижу, поломаю еще голову...
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030337
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wh1Спасибо, но не помогло
Что, "очки не действуют никак"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030414
wh1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wh1
Гость
Dimitry Sibiryakovwh1Спасибо, но не помогло
Что, "очки не действуют никак"?..

Не понял тебя.
???
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка повторяющихся записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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