powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом
16 сообщений из 16, страница 1 из 1
Помогите с запросом
    #32648083
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица clients.dbf на 60000 записей
поля ID, NAME,FAM,OTCH,DAT,ADR
Из-за ошибок ввода появились двойники NAME,FAM,OTCH
но это одни и те же люди
как их найти?
сам писал запрос на вылетает ошибка
SQL не знаю
select NAME as n ,FAM as f,OTCH as o
from clients
where
( select count(*)
from clients
where NAME=n and FAM=f and OTCH=o)>1;
помогите кто может плз.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32648125
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диалект Select-SQL в FoxPro отличается от диалекта MS SQL. То что ты написал для FoxPro синтаксически некорректно. Понадобяться 2 последовательных запроса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
* Сначала определяем список значений, имеющих дубли
SELECT NAME,FAM,OTCH, Count(*) as kol
FROM clients
INTO CURSOR curDoubl NOFILTER
GROUP BY NAME,FAM,OTCH
HAVING Count(*)> 1 

* Теперь определяем собственно дублирующие записи

SELECT a.*, b.kol
FROM client a
INNER JOIN curDoubl ON a.NAME=b.NAME AND a.FAM=b.FAM AND a.OTCH=b.OTCH
...
Рейтинг: 0 / 0
Помогите с запросом
    #32648166
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так:

Код: plaintext
select ID from clients.dbf where NAME+FAM+OTCH in (select NAME+FAM+OTCH from clients.dbf gropup by  1  having count(*)> 1 ) 

?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32648915
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо первый запрос не работает
а второй способ прошел нормально
но возникла новая проблема:
есть настоящие двойники и теперь нужно
добавить дату рождения в запрос?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32649118
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drobuСпасибо первый запрос не работает
а второй способ прошел нормально
но возникла новая проблема:
есть настоящие двойники и теперь нужно
добавить дату рождения в запрос?
Примерно так:

Код: plaintext
select ID from clients.dbf where NAME+FAM+OTCH+dtoc(DAT) in (select NAME+FAM+OTCH+dtoc(DAT)  from clients.dbf gropup by  1  having count(*)> 1 )

OK?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32649445
Kravtsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select a.* from clients a join clients b on a.NAME = b.NAME and a.FAM = b.Fam and a.OTCH = b.OTCH и тд все что нужно сравнить

Подойдет?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650296
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно так:
Код: plaintext
select ID from clients.dbf where NAME+FAM+OTCH+dtoc(DAT) in (select NAME+FAM+OTCH+dtoc(DAT)  from clients.dbf gropup by  1  having count(*)> 1 )

OK?[/quot]
Почемуто у меня вылетает ошибка:
неизвестная функция- скорее всего dtoc()
Может потому что я использую TotalCommander+xBase
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650306
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kravtsovselect a.* from clients a join clients b on a.NAME = b.NAME and a.FAM = b.Fam and a.OTCH = b.OTCH и тд все что нужно сравнить

Подойдет?
Этот запрос работает но в таблице 60000 записей
и мой Р4 1800 512МБ зависает надолго
ждал минут 10 потом отменил
Потом старому запросу нашел всех двойников
и экспортировал все в новую табл
выдал 4517 записей
но после запроса
select a.* from clients a join clients b on a.NAME = b.NAME and a.FAM = b.Fam and a.OTCH = b.OTCH and a.dat=b.dat and a.id=b.id

мне вернулись теже 4517 записей
я думаю join здесь неподойдет
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650431
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drobu Примерно так:
Код: plaintext
select ID from clients.dbf where NAME+FAM+OTCH+dtoc(DAT) in (select NAME+FAM+OTCH+dtoc(DAT)  from clients.dbf gropup by  1  having count(*)> 1 )

OK?
Почемуто у меня вылетает ошибка:
неизвестная функция- скорее всего dtoc()
Может потому что я использую TotalCommander+xBase[/quot]
К моему стыду я не знаю, что такое TotalCommander+xBase

Суть данной функции привести к символьному виду поле типа DATE - кстати а дата рождения у Вас в каком виде хранится? В DATE or CHARACTER? Дело в том, что функция DTOC() стандартная и работает со всеми версиями FoxPro (хотя в новых разработках ее применять не рекомендуется)...

Если у Вас версия VFP 8.0 - то есть ньюансы с установками некоторых параметров...
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650462
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сам попробовал написать запрос из новой таблицы где все двойники 4517
select id,FAM,NAME,OTCH ,DAT,
from dvoinik a
where dat in ( select b.dat
from dvoinik b
where a.FAM=b.FAM
and a.NAME=b.NAME
and a.OTCH=b.OTCH
and a.DAt=b.DAT
group by 1 having count(*)>1
)

order by FAM,NAME,OTCH
Выдал 2195 записи
но здесь какой-то пародокс некоторых настоящих двойников он убирает
а кое-где остается один из них или оба
не могу понять?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650480
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш предыдущий запрос неверен, так-как идет выборка в подзапросе только по дате...
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650569
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey ChВаш предыдущий запрос неверен, так-как идет выборка в подзапросе только по дате...
Почему?
Я понимаю так :
для каждой записи из внешего
во внутреннем запросе по ФИО находятся все даты для этой ФИО и остаются только те у которых кол-во >1

select b.dat
from dvoinik b
where a.FAM=b.FAM
and a.NAME=b.NAME
and a.OTCH=b.OTCH
*здесь удалил and a.DAt=b.DAT
group by 1 having count(*)>1

Или я ошибаюсь?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650615
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожадению Вы ошибаетесь - выборка только по дате, а надо по совокупности условия поиска. И я точно не уверен что все правильно будет с видимостью областей из запроса в подзапросе. Странно что мой вариант не проходит...

Код: plaintext
1.
2.
select ID from clients.dbf where ;
NAME+FAM+OTCH+dtoc(DAT) in (select NAME+FAM+OTCH+dtoc(DAT) as SSS  ;
from clients.dbf gropup by  1  having count(*)> 1 )

Нельзя ли выложить здесь Вашу структуру данных и я бы потренировался
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650687
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NAME TYPE SIZE точность
----------------------------
ID N 14 0
NAME C 24
FAM C 15
OTCH c 26
DAT D 8
дальше наверно не надо...
GOrod N 10
ULICa N 10
DOM
....
...
Рейтинг: 0 / 0
Помогите с запросом
    #32650795
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это была у меня синтаксическая ошибка. Вот исправленный и проверенный на Вашей структуре:
Код: plaintext
1.
2.
select ID from clients.dbf where ;
NAME+FAM+OTCH+DTOC(DAT) in (select NAME+FAM+OTCH+DTOC(DAT) as SSS  ;
from clients.dbf group by  1  having count(*)> 1 )
...
Рейтинг: 0 / 0
Помогите с запросом
    #32653120
drobu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь !
но я уже бросил это дело
распечатал всех пусть сами разбираются кто есть кто
других проблем тоже много!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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