Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом / 16 сообщений из 16, страница 1 из 1
13.08.2004, 10:21
    #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
13.08.2004, 10:34
    #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
13.08.2004, 10:49
    #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
13.08.2004, 15:04
    #32648915
drobu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Спасибо первый запрос не работает
а второй способ прошел нормально
но возникла новая проблема:
есть настоящие двойники и теперь нужно
добавить дату рождения в запрос?
...
Рейтинг: 0 / 0
13.08.2004, 16:15
    #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
13.08.2004, 20:01
    #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
16.08.2004, 09:39
    #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
16.08.2004, 09:46
    #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
16.08.2004, 10:52
    #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
16.08.2004, 11:09
    #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
16.08.2004, 11:15
    #32650480
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Ваш предыдущий запрос неверен, так-как идет выборка в подзапросе только по дате...
...
Рейтинг: 0 / 0
16.08.2004, 11:50
    #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
16.08.2004, 12:05
    #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
16.08.2004, 12:31
    #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
16.08.2004, 13:11
    #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
17.08.2004, 15:31
    #32653120
drobu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Спасибо за помощь !
но я уже бросил это дело
распечатал всех пусть сами разбираются кто есть кто
других проблем тоже много!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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