powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (Select - SQL) Выборка одинаковых значений
17 сообщений из 17, страница 1 из 1
(Select - SQL) Выборка одинаковых значений
    #32947944
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица Table_one, в ней повторяющиеся значения в Field_one:
Field_one С(2)Field_twoField_three01Буква ААрмавир02Буква ББелебей03Буква ВВетлуга04Буква ГГорячий ключ01Буква ААпатиты02Буква ББалей
Необходимо выбрать все записи, которые повторяются в столбце Field_one. Задача часто встречающаяся и решена, но путем создания двух запросов.
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT COUNT(Field_one) AS Kolwo_zap, Field_one FROM Table_one ;
   GROUP BY Field_one ORDER BY Kolwo_zap INTO CURSOR cur_one NOFILTER READWRITE 
***************
SELECT Cur_one.Kolwo_zap, Table_one.* ;                    
   FROM cur_one ;
   INNER JOIN Table_one ON  Cur_one.Field_one = Table_one.Field_one ;
   WHERE  Cur_one.summa_zap >  1  INTO CURSOR cur_two NOFILTER READWRITE
Может подскажите, как решить эту задачу попроще => 1 запросом и не выстраивая отношений.

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32947967
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grumax_userЕсть таблица Table_one, в ней повторяющиеся значения в Field_one:
Field_one С(2)Field_twoField_three01Буква ААрмавир02Буква ББелебей03Буква ВВетлуга04Буква ГГорячий ключ01Буква ААпатиты02Буква ББалей
Необходимо выбрать все записи, которые повторяются в столбце Field_one. Задача часто встречающаяся и решена, но путем создания двух запросов.
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT COUNT(Field_one) AS Kolwo_zap, Field_one FROM Table_one ;
   GROUP BY Field_one ORDER BY Kolwo_zap INTO CURSOR cur_one NOFILTER READWRITE 
***************
SELECT Cur_one.Kolwo_zap, Table_one.* ;                    
   FROM cur_one ;
   INNER JOIN Table_one ON  Cur_one.Field_one = Table_one.Field_one ;
   WHERE  Cur_one.summa_zap >  1  INTO CURSOR cur_two NOFILTER READWRITE
Может подскажите, как решить эту задачу попроще => 1 запросом и не выстраивая отношений.

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь

Ну, например так:
Код: plaintext
1.
2.
3.
4.
5.
SELECT Table_one.* ;                    
   FROM Table_one ;
WHERE Field_one IN (SELECT DISTINCT Field_One ;
FROM Table_one);
NOFILTER READWRITE
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32947972
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если содержимое записей действительно одинаковое (в смысле содержимое всех полей одинаково), то

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT ;
	COUNT(*) as Kolwo_zap, ;
	Field_one, ;
	Field_two, ;
	Field_three ;
FROM Table_one ;
INTO CURSOR cur_one NOFILTER READWRITE ;
GROUP BY ;
	Field_one, ;
	Field_two, ;
	Field_three ;
HAVING COUNT(*) >  1  ;
ORDER BY  1 
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32947980
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry, немного не дочитал вопроса. В мой ответ надо дбавить еще фильтр по количеству повторений... Но смысл моего решения понятен - сделать вложенный запрос в списке условий...
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948091
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир
Не пашет
Содержимое записей не одинаково, есть только повторяющиеся значения в Field_one. Смотрите таблицу Table_one.
2 Станислав
Станиславсделать вложенный запрос в списке условий...
Видел решение во вложеном запросе с самого начала, но это собственно и есть моя проблема (с вложеными запросами всмысле
) Просто думаю, что если есть 2 запроса по одной таблице, то и 1 пройдет

Результирующая таблица(курсор)
Kolwo_zapField_oneField_twoField_thre201Буква ААрмавир202Буква ББелебей201Буква ААпатиты202Буква ББалей
З.Ы. Поправка. Oпечатка в вопросе
Код: plaintext
WHERE Cur_one.Kolwo_zap >  1  INTO CURSOR cur_two NOFILTER READWRITE

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948136
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2 Владимир
Не пашет Содержимое записей не одинаково, есть только повторяющиеся значения в Field_one. Смотрите таблицу Table_one.

Что конкретно не пашет, код приведенный ВладимирМ, как раз и исправляет два Ваших первоначальных селекта.
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948149
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вы блин даете а внимательно прочитать владимира и додумать
так низя?
SELECT ;
COUNT(1) as Kolwo_zap, ;
Field_one, ;
Field_two, ;
Field_three ;
FROM Table_one ;
INTO CURSOR cur_one NOFILTER READWRITE ;
GROUP BY ;
Field_one ;
HAVING Kolwo_zap> 1 ;
ORDER BY 1
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948159
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторну вы блин даете а внимательно прочитать владимира и додумать
так низя?

У Васвот здесь ошибка

Код: plaintext
1.
GROUP BY ;
Field_one ;

надо добавить все поля после Select
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948173
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ребята, Grumax_user прав. Если при одинаковом значении поля Field_one есть записи с разным значением в других полях, то без подзапроса (или 2-х последовательных запросов) задача не решается.

Сначала отбираются те значения Field_one по которым есть дубли, а потом все записи имеющие отобранные значения Field_one.
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948177
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistнадо добавить все поля после Select

Автор не указал версию. Для < 8 правильно. Хотя нужно конечно привыкать к правильному написанию. Только не все поля после SELECT, а те который не учавствуют агрегированных функциях.
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948313
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grumax_user

Прошу пардона (поторопился) не вьехал сразу в вопрос, что-нибудь родим.

AleksMedТолько не все поля после SELECT, а те который не учавствуют агрегированных функциях

Код: plaintext
1.
2.
3.
4.
5.
CREATE CURSOR test1 (ID i, fld1 i)

INSERT INTO test1 (ID, fld1) VALUES ( 1 ,  1 )
INSERT INTO test1 (ID, fld1) VALUES ( 1 ,  2 )

SELECT COUNT(id), ID FROM test1 GROUP BY id

А так - поле участвует в агрегации
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948324
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistА так - поле участвует в агрегации
И да и нет :)
Ну ты же понял о чем я :)
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948335
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grumax_user

"Грязное" решение, те работает если в третьем поле значения не повторяются иначе COUNT будет не правильно отображаться, если он конечно нужен

Код: 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.
27.
28.
29.
30.
31.
CREATE CURSOR test (Field_one c( 2 ), Field_Two c( 10 ), Field_Three c( 10 ))

INSERT INTO test (Field_one , Field_Two , Field_Three ) ;
VALUES ('01', 'БукваА', 'Армавир')

INSERT INTO test (Field_one , Field_Two , Field_Three ) ;
VALUES ('02', 'БукваБ', 'Батум')

INSERT INTO test (Field_one , Field_Two , Field_Three ) ;
VALUES ('02', 'БукваБ', 'Бум-Бум')

INSERT INTO test (Field_one , Field_Two , Field_Three ) ;
VALUES ('01', 'БукваА', 'Арбуз')

INSERT INTO test (Field_one , Field_Two , Field_Three ) ;
VALUES ('01', 'БукваА', 'Арзамас')


SELECT ;
	COUNT(t1.Field_one) as Kolwo_zap, ;
	t1.Field_one, ;
	t1.Field_two, ;
	IIF(t1.Field_three == t2.Field_three, t1.Field_three, t2.Field_three) ;
FROM test t1;
INNER JOIN test t2 ON t1.Field_one == t2.Field_one ;
INTO CURSOR cur_one NOFILTER READWRITE ;
GROUP BY ;
	t1.Field_one, ;
	t1.Field_two, ;
	 4  ;
HAVING COUNT(t1.Field_one) >  1  ;
ORDER BY  1 

AleksMed

AleksMedНу ты же понял о чем я :)

Взаимно.
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948337
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия VFP 8.0 ... когда была 6.0, там GROUP странно работал, пришлось переосмысливать, перейдя на 8-ку
leafа внимательно прочитать владимира
Читал внимательно...
Всё ещё нужен подзапрос

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948452
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PaulWist
Прекрасно...Запрос работает, в данном конкретном случае, но (на вскидку) мне не хотелось бы проводить анализ какого либо поля(повторяются ли в нём значения или нет), а если често слегка не допонял запрос...все команды понятны, но как работает...Вам в обед не наливали? *хох*
Дома доразберусь...

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32948491
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist
Отличная идея! В общем случае, решается так:

Код: plaintext
1.
2.
3.
4.
SELECT t1.* ;
FROM test t1 ;
INNER JOIN test t2 ON t1.Field_one=t2.Field_one
GROUP BY  1 , 2 , 3  ;
HAVING COUNT(*)> 1 

Идея в следующем. Связываем таблицу саму с собой по тому полю, уникальность которого контролируем. В случае, если есть несколько записей с этим значением, при таком объединении будет больше 1 записи в итоговом курсоре. GROUP BY отсекает лишние дубли (каждая запись повторится несколько раз) В списке для группировки надо перечислить ВСЕ поля.

Единственный недостаток такого запроса - он "съест" записи, которые полностью дублируются. Т.е. у которых абсолютно одинаковое содержимое ВСЕХ полей. При таком запросе в результате будет только одна из таких дублирующих записей.

Если бы у таблицы было уникальное поле (суррогатный ключ), то и проблемы не было бы. Отбирались бы только нужные записи.
...
Рейтинг: 0 / 0
(Select - SQL) Выборка одинаковых значений
    #32949036
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир
Во!!! То что надо.
ВладимирЕсли бы у таблицы было уникальное поле
Есть такое в реальной таблице. Я вообще с некоторых пор не создаю таблиц без уникального поля(решает кучу проблем в настоящем и будущем). Сейчас пишу прогу импорта из DOS'а в рабочую базу...исплевался весь(нету там уникального поля
)
Всем большое спасибо...

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


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