Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть таблица TABLE1, в ней есть несколько полей FIELD1, ..., FIELD7. Значения полей FIELD1 и FIELD2 могут повторяться. Как отобрать все записи из этой таблицы, у которых есть повторы в этих полях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 16:41 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
SELECT Field1, Field2, Field3, ..., Field7, Count(*) ; FROM MyTab ; GROUP BY 1,2,3,4,5,6,7 HAVING Count(*)>1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 16:45 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял условие: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 16:49 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
To NNN - спасибо, а так получится? SELECT FIELD1, .., FIELD7 FROM TABLE1 A WHERE A.FIELD1 IN (SELECT B.FIELD1 FROM TABLE1 B WHERE A.FIELD1 = B.FIELD1 AND A.FIELD2 = B.FIELD2 GROUP BY B.FIELD1, B.FIELD2 HAVING COUNT(*)>1) To Владимир - вы не совсем правильно поняли условие - так он выдаст записи, у которых повторы по всем 7-ми полям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 17:23 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
2coolkenga > а так получится? Ну это же можно и самому проверить? :) Я так до конца и не понял, какие из этих записей будет считаться повторящимися (по каждому полю или по комбинации полей)? field1 field2 0 0 1 2 1 3 2 1 2 2 3 4 3 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 14:08 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
> а так получится? Ну это же можно и самому проверить? :) Можно. :) Надо создать контр. пример. :) Я так до конца и не понял, какие из этих записей будет считаться повторящимися (по каждому полю или по комбинации полей)? field1 field2 0 0 1 2 1 3 2 1 2 2 3 4 3 4 По комбинации 2-х полей field1 field2 0 0 3 4 3 4 Да, т.е. ваш запрос может отобрать и не совсем то (1 2, 2 2 ). Надо было мне лучше обьяснять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 16:00 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
Подойдет? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 16:53 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
Подойдет? SELECT * FROM table1 WHERE field1 in ; (SELECT field1 FROM table1 GROUP BY field1, field2 HAVING count(*)>1) ; AND field2 in ; (SELECT field2 FROM table1 GROUP BY field1, field2 HAVING count(*)>1) Спасибо. :) До меня дошло, чем то, что я предложила в некотором роде удобнее - если надо искать повторяющиеся комбинации из более чем 2-х полей - получается короче - добавлять надо только условие после WHERE (соединять еще и по новому полю) и группировать по нему же. PS SELECT был не мой - сама в нем разбиралась. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 17:18 |
|
||
|
Отбор записей с повторяющимися значениями нескольких полей
|
|||
|---|---|---|---|
|
#18+
Возможно, запоздалая реплика, но все же: выше Coolkenga предлагает вариант, при котором «наращивание» количества проверяемых на комбинационный повтор полей осуществляется более просто. На мой взгляд, можно поступить еще проще, если представить проверяемую на повтор комбинацию полей в виде символьной строки с разделителями. При этом для НЕсимвольных полей следует применять соответствующие VFP-функции преобразования типов: str(), dtoc(), ttoc() и т.п. При чем саму эту комбинацию вовсе не обязательно включать в список выводимых полей. Ниже я предлагаю пример такой «разноТиповой» таблицы и два варианта выборки с проверкой повтора комбинаций 2-го и 7-го поля: (повторяются попарно записи 1 и 6, 2 и 4) f1(Char) f2(Num) f3(Date) f4(Currn) f5(Int) f6(float) f7(DateTime) "text1" 123 12.12.2003 653.2340 536 457.00 18.12.04 10:15:20 "text2" 234 11.11.2004 345.2356 647 265.32 15.11.03 11:10:28 "text3" 378 10.10.2006 25789.452 9673 954.69 12.09.07 13:43:07 "text4" 234 14.07.2002 32.5689 7935 2.76 15.11.03 11:10:28 "text5" 2843 13.05.2001 73621.183 1116 0.38 16.03.05 14:13:12 "text6" 123 12.12.2003 128.1280 479 236.78 18.12.04 10:15:20 Вариант 1. Если выводимые значения НЕпроверяемых полей не являются важными для пользователя: select * from 000 group by 2,7; having count(alltrim(str(f2))+' '+ttoc(f7))>1; order by 2,7 Вариант 2. Если необходимо видеть ИСТИННЫЕ значения ВСЕХ полей в повторяющихся записях: select *,recno() as rec from 000; where (alltrim(str(f2))+' '+ttoc(f7)) in (select alltrim(str(f2))+' '+ttoc(f7) from 000 group by f2,f7; having count(alltrim(str(f2))+' '+ttoc(f7))>1) order by 2,7 При необходимости добавление другого поля в проверяемую комбинацию осуществить довольно просто: добавить приведенное к символьному виду поле в комбинацию полей через разделитель (в моем примере - пробел). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 00:22 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32366256&tid=1597275]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
143ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 467ms |

| 0 / 0 |
