|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Необходимо из таблицы Interbase выбрать и вывести все записи с одинаковым значением одного из полей. Таких значений может быть несколько...но нужны они все То есть по сути, нужны те записи, где любое значение FIELD1 встречается в таблице больше одного раза... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 15:20 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Погляди тут:\r /topic/38634 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 15:24 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Посмотрела..немного не то....Хотя вопрос аналогичный 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 15:33 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Попробуй так: select name, count(*) from table1 group by name having count(*) > 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 15:44 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Я делаю так: select * from sptvr a where (select count(b.id) from sptvr b where a.namtvr = b.namtvr) > 1 order by a.namtvr Таким образом выбираются записи с ОДИНАКОВЫМ значением поля NAMTVR таблицы SPTVR ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 15:52 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Сделала так: select fam from table group by fam having count (fam) > 1 Сработало...Всем спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 16:03 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Рано обрадовалась...:( Записи выводятся только по одному разу.... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 16:44 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Настаиваю на select * from table where (select count(b.id) from table b where a.fam = b.fam) > 1 order by a.fam Выбираются ВСЕ повторяющиеся записи ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 16:51 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Sorry, я чуть-чуть ошибся. Правильно так: select * from table a where (select count(b.id) from table b where a.fam = b.fam) > 1 order by a.fam ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 16:52 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Так табличка то у меня всего одна.... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 16:55 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Можно одну таблицу использовать в запросе с разными псевдонимами, что и используется. Попробуйте, потом продолжим разговор. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:02 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
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 Вот так все работает!!)) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:08 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Ой! Как тяжело все это будет работать на большой базе ... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:09 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Если есть предложения, то выслушаю...Как сие можно оптимизировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:12 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
При наличии ключа по полю 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 записями ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:15 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Катерина! А почему не подходит вариант Timujin ? Мне кажется самый логичный. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:24 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
И мне ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:25 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Так Я его вариант и взяла :) Только под себя чуть-чуть подогнала....просто у меня три поля....которые должны полностью совпадать ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:26 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:28 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Вот кажется еще один вариант, но через ХП (очень быстрый, т.к. проходов по записям мало) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2003, 17:45 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Всем спасибо! :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2003, 16:24 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Спасибо, 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 Работает НАМНОГО быстрее, чем то, что предложила Я сама.... Огромное спасибо еще раз:)) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2003, 16:29 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Поторопилась обрадоваться.... Пишу так... 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 Но выбирается не совсем то, что нужно....Вернее среди выбранных полей на самом деле есть нужные мне записи, но встречаются и те, которых быть не должно.... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2003, 16:42 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Обратите внимание на ПСЕВДОНИМЫ таблиц в запросе. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2003, 09:37 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Тогда вопрос такой.... Как обратиться к одной и той же таблице, но с разными псевдонимами? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2003, 16:09 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Псевдонимы таблиц в запросе - это обозначения таблиц только в этом конкретном запросе и они (псевдонимы) могут быть какими угодно и для любых таблиц и процедур. Например, 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.
PSEVD1 и PSEVD2 - это и есть псевдонимы для одной и той же таблицы <ab>. В данном запросе нужно, чтобы одна и та же таблица была открыта как-бы два раза для нахождения записей, у которых Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2003, 16:31 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Спасибо....Все работает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2003, 16:58 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Катерина, либо Вы не захотели подумать и дополнить мой первоначальный вариант, либо незаметили или невнимательно проанализировали вариант 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2003, 17:02 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Пока непонятен. Не буду скрывать.... Буду разбираться.... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2003, 17:06 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
2 Zmeishe >> Вариант Timujin тоже хорош, когда совпадение по одному полю. Мой вариант работает, когда совпадение по любому кол-ву полей Ж:( См. выше на запросы ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2003, 17:12 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
Timujin >> Мой вариант работает, когда совпадение по любому кол-ву полей Ж:( В том, что работает нисколько не сомневаюсь. Но N подзапросов проанализировать, например через год будет сложно. Тем более, если будешь заниматься уже другой задачей и придётся вновь дорабатывать эту. Или если вместо тебя эту задачу будет сопровождать другой программист. for select ... do for select ... do читается и анализируется легче чем select ... where (select .... where) and (select .... where) Смысл термина 'читабельность', ещё никто не отменял. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 08:35 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
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.
или Timujin Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Если я не прав, напиши мне, ALL ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 09:17 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
друзья, помогите, не могу разобраться. Прочитал, попытался сделать как тут, не выходит... Проблема следующая: 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 "); выводит примерно так: а надо так: То есть показать не все выплаты на эти кошельки, а только по одной записи, если такие встречаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2015, 01:31 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
wh1, если я тебя правильно понял то это должно помочь: Код: plsql 1.
Такие древние топики не стоит поднимать, хотя задача и похожа немного. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2015, 11:49 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
stelvicwh1, если я тебя правильно понял то это должно помочь: Код: plsql 1.
Такие древние топики не стоит поднимать, хотя задача и похожа немного. Спасибо, но не помогло (( Посижу, поломаю еще голову... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2015, 17:37 |
|
Выборка повторяющихся записей
|
|||
---|---|---|---|
#18+
wh1Спасибо, но не помогло Что, "очки не действуют никак"?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2015, 17:55 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562669]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 441ms |
0 / 0 |