Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отбор записей с повторяющимися значениями нескольких полей / 9 сообщений из 9, страница 1 из 1
25.12.2003, 16:41
    #32363553
coolkenga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
Здравствуйте!

Есть таблица TABLE1, в ней есть несколько полей FIELD1, ..., FIELD7. Значения полей FIELD1 и FIELD2 могут повторяться. Как отобрать все записи из этой таблицы, у которых есть повторы в этих полях?
...
Рейтинг: 0 / 0
25.12.2003, 16:45
    #32363567
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
SELECT Field1, Field2, Field3, ..., Field7, Count(*) ;
FROM MyTab ;
GROUP BY 1,2,3,4,5,6,7 HAVING Count(*)>1
...
Рейтинг: 0 / 0
25.12.2003, 16:49
    #32363582
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
Если я правильно понял условие:
Код: plaintext
1.
2.
3.
SELECT * FROM table1 WHERE field1 in ;
(SELECT field1 FROM table1 GROUP BY field1 HAVING count(*)> 1 ) ;
AND field2 in ;
(SELECT field2 FROM table1 GROUP BY field2 HAVING count(*)> 1 )
...
Рейтинг: 0 / 0
25.12.2003, 17:23
    #32363646
coolkenga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
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-ми полям
...
Рейтинг: 0 / 0
26.12.2003, 14:08
    #32364494
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
2coolkenga

> а так получится?

Ну это же можно и самому проверить? :)

Я так до конца и не понял, какие из этих записей будет считаться повторящимися (по каждому полю или по комбинации полей)?
field1 field2
0       0
1       2
1       3
2       1
2       2
3       4
3       4
...
Рейтинг: 0 / 0
29.12.2003, 16:00
    #32366120
coolkenga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
> а так получится?
Ну это же можно и самому проверить? :)
Можно. :) Надо создать контр. пример. :)

Я так до конца и не понял, какие из этих записей будет считаться повторящимися (по каждому полю или по комбинации полей)?
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 ). Надо было мне лучше обьяснять :)
...
Рейтинг: 0 / 0
29.12.2003, 16:53
    #32366213
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
Подойдет?
Код: plaintext
1.
2.
3.
SELECT * FROM table1WHERE field1 in ;
(SELECT field1 FROM table1GROUP BY field1, field2 HAVING count(*)> 1 ) ;
AND field2 in ;
(SELECT field2 FROM table1GROUP BY field1, field2 HAVING count(*)> 1 )
...
Рейтинг: 0 / 0
29.12.2003, 17:18
    #32366256
coolkenga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
Подойдет?
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 был не мой - сама в нем разбиралась. :)
...
Рейтинг: 0 / 0
28.01.2004, 00:22
    #32389894
neznajka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор записей с повторяющимися значениями нескольких полей
Возможно, запоздалая реплика, но все же:
выше 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

При необходимости добавление другого поля в проверяемую комбинацию осуществить довольно просто: добавить приведенное к символьному виду поле в комбинацию полей через разделитель (в моем примере - пробел).
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отбор записей с повторяющимися значениями нескольких полей / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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