powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка данных из таблицы
27 сообщений из 27, показаны все 2 страниц
Выборка данных из таблицы
    #35343623
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 2 таблицы,
1 таблица основной список клиентов,
2 таблица из филиала содержит маленький список клиентов,
подскажите пожалуйста как сделать чтобы производился поиск по всем именам клиентов из 2 (маленькой таблицы) в первой таблице с последуюшим выводом найденных?????
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35344060
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ключи..Индексы надеюсь есть?
select * from vtoray where seek(kod,"pervay","kod") into ...
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35344730
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что нужно вывести строки, которые содержаться и там и
там???

Select _1.* from _1 inner join_2 on _1.name==_2.Name into cursor ttt
brow

Ну или, смотря что надо
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее
brow


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35345374
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
индексный файл cdx имеется у большого файла но в другом каталоге,
а как его использовать чтобы поиск производился быстрее?

запрос -
Код: plaintext
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее

производится очень долго, я понимаю что надо использовать индексный файл, но как, где?
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35345457
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
_screen.Cls()

create cursor tt (t i)
insert into tt values ( 1 )
insert into tt values ( 2 )
insert into tt values ( 3 )
insert into tt values ( 4 )
insert into tt values ( 5 )

create cursor pp (p i)
insert into pp values ( 3 )
insert into pp values ( 5 )


sys( 3054 , 12 )

? "1"
? "=================="
* нет
select * from tt where t> 0  into cursor kk


? "2"
? "=================="
* да
set deleted off
select tt
index on t tag t
index on deleted() tag del

select * from tt where t> 0  into cursor kk


? "3"
? "=================="
* нет
select tt.* ;
	from tt ;
		inner join pp on pp.p=tt.t ;
	into cursor kk



? "4"
? "=================="
* да
select pp
index on p tag p
index on deleted() tag del

select t1.* ;
	from tt t1;
		inner join pp t2 on t1.t=t2.p and t2.p= 5  ;
	where t1.t= 5  ;
	into cursor kk
	


прочитайте про рашмор
+ понимание оптимизации в хелпе
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35345475
index on deleted() tag del binary

про это также есть в хелпе,
попробуйте почитать и поискать здесь
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35345848
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirtiиндексный файл cdx имеется у большого файла но в другом каталоге,
а как его использовать чтобы поиск производился быстрее?

запрос -
Код: plaintext
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее

производится очень долго, я понимаю что надо использовать индексный файл, но как, где?
Индексный файл используется автоматически, если он подключен. При этом его физическое положение роли не играет.

Ваша фраза "индексный файл имеется ... но в другом каталоге" надо понимать так, что он находится не там, где сам "большой файл"?

Вообще, факт использования или не использования индекса можно проверить при помощи функции SYS(3054) примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
* Включаем отображение работы оптимизатора
=SYS( 3054 , 12 )

* Выполняем запрос
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее

* Отключаем отображение работы оптимизатора
=SYS( 3054 , 0 )

Ну, а то, что запрос "долго работает" может быть следствие большого количества записей, которые попадают в выборку.

Кстати, если во второй (маленькой) таблице возможны дубли (повторы) названий клиентов, то INNER JOIN использовать нельзя. Необходимо переписать запрос на IN или EXISTS примерно так

Код: plaintext
Select _2.* from _2 where _2.Name IN (SELECT _1.Name FROM _1) into cursor еее
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35346208
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМВаша фраза "индексный файл имеется ... но в другом каталоге" надо понимать так, что он находится не там, где сам "большой файл"?
Да сама основная база лежить в каталоге - flip\base\klients.dbf
а индексный файл лежит в - flip\cdx\klients.cdx

при выполнении комманды =SYS(3054,12)
пишет что оптимизация для таблицы отсутствует,
что мне дальше сделать чтобы она присутствовала :-) ?
или как соединить индексный файл?
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35346259
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, если индекс лежит отельно от файла, то подключить его можно таким образом

Код: plaintext
1.
2.
3.
4.
5.
USE flip\base\klients.dbf INDEX flip\cdx\klients.cdx IN  0  ALIAS klients

* В качестве источника данных в запросе указывается имя из опции ALIAS команды USE

SELECT ... FROM klients  

Однако проблема в том, что в случае раздельного существования файла DBF и файла CDX есть риск их рассинхронизации. В том смысле, что содержимое индексного файла не соответствует содержимому табличного файла (данные устарели).

Как правило, в этих случаях после подключения индекса выполняют переиндексацию. Хотя этот процесс занимает довольно много времени.

Впрочем, попробуйте сначала проверить выполнение запроса с подключенным индексом.
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35348496
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
перекинул индексные файлы в тот же каталог где и бдфки,
проиндексировал главный файл заново,
маленькие таблицы которые поступают тоже индексирую,
но запрос всеравно происходит медленно, в главной таблице около 1млн 700 тыс. записей
запрос выполняется около 27 секунд!!!!!!
почему? что я не так делаю???
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35348521
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала, надо проверить используются ли эти самые индексы. При помощи функции SYS(3054).
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35348581
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проверил данной функцией, пишет что оптимизация таблиц отсутствует! :((
почему? ну как же ее тогда включить?
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35348601
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это значит, что по мнению оптимизатора данный индекс использовать нельзя.

Такое возможно, если индекс создан в режиме COLLATE отличном от текущей настройки SET COLLATE.

Используй функцию ATAGINFO() после открытия таблицы чтобы посмотреть реквизиты открытого индекса. Обрати внимание на 6 столбец. Затем сравни с тем, что возвращает

?SET("COLLATE")

Кроме того, оптимизатор не использует индексы, имеющие FOR-условия (это 4 столбец полученного по ATAGINFO() массива), кроме некоторых исключений.
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35348678
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ATAGINFO() возвращает - 0 (ноль)

?SET("COLLATE") возврашает - Machine
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35348686
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь!!!
ATAGINFO - возврашает 1
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35348879
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirtiизвиняюсь!!!
ATAGINFO - возврашает 1

Почитайте, пожалуйста, HELP по функции ATAGINFO(). Используется примерно так:

Код: plaintext
1.
2.
3.
select MyTable
=ATAGINFO(laIndex)
* Анализ созданного массива laIndex
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35349028
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот что показала функция ATAGINFO:
1.KLIENTS
2.REGULAR
3.NUMP
4.lAINDEX
5.ASCENDING
6.MACHINE

SET("COLLATE") возврашает - Machine

ВладимирМОбрати внимание на 6 столбец. Затем сравни с тем, что возвращает
?SET("COLLATE")
шестой столбец совпадает с полученным результатом от функции SET
пожалста скажите что надо делать дальше!
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35349119
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМКроме того, оптимизатор не использует индексы, имеющие FOR-условия (это 4 столбец полученного по ATAGINFO() массива), кроме некоторых исключений.
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35349308
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы сильно не ругайте меня,я новичок в фоксе,
а 4 столбец это же имя масива в который я получаю эти значения,
выходит что быстрее поиск выполняться уже не будет?
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35350033
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirtiВы сильно не ругайте меня,я новичок в фоксе,
а 4 столбец это же имя масива в который я получаю эти значения,
выходит что быстрее поиск выполняться уже не будет?
Вы бы все-таки HELP прочитали. Не может 4 столбец содержать имя массива. Там содержится выражение, которое указывается в FOR-условии команды INDEX. Как Вы вообще смотрите содержимое этого массива?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCAL laIndex( 1 ), lnTotal, lnI
select MyTable
lnTotal = ATAGINFO(laIndex)
FOR m.lnI =  1  TO m.lnTotal
	?"----------------------"
	?"Индекс ", m.lnI
	?"Name = ", laIndex[m.lnI, 1 ]
	?"Type = ", laIndex[m.lnI, 2 ]
	?"Key = ", laIndex[m.lnI, 3 ]
	?"Filter = ", laIndex[m.lnI, 4 ]
	?"Order = ", laIndex[m.lnI, 5 ]
	?"Collate = ", laIndex[m.lnI, 6 ]
ENDFOR
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35350363
mirti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот что получилось:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Индекс      1 
Name= Kod
Type= Regular
Key= alltrim(seria)+alltrim(nomer)
Filter=
Order= Ascending
Collate= Machine

Индекс      2 
Name= FIO
Type= Regular
Key= names
Filter=
Order= Ascending
Collate= Machine

четвертый столбец пустой
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35350626
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Индекс 1
> Name= Kod
> Type= Regular
> Key= alltrim(seria)+alltrim(nomer)
> Filter=
> Order= Ascending
> Collate= Machine
>
> Индекс 2
> Name= FIO
> Type= Regular
> Key= names
> Filter=
> Order= Ascending
> Collate= Machine


А теперь посмотри на условия индекса (key = ) и условия объединения:

_1.name==_2.Name

Я индекса по "name" не вижу.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35351361
не pro в fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Индексный файл используется автоматически, если он подключен.


а как узнать подключен к файлу индексный файл и как его имя?
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35352114
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не pro в fox ВладимирМ
Индексный файл используется автоматически, если он подключен.


а как узнать подключен к файлу индексный файл и как его имя?
Структурный индексный файл подключается автоматически. Если же хочется посмотреть список подключенных индексных файлов, то это можно сделать так:

Код: plaintext
?SET("INDEX")
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35353221
не pro в fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В каких случаях данный структурный файл подключается, а в каких нет? Имеется система позволяющая выгружать данные в dbf файл. В некоторых случаях при открытии dbf файла требуется cdx файл. Т.е. вопрос наверное звучит так: индексный файл создается автоматически при создании dbf файла или это реализация программистов писавших систему - возможна запись в файл dbf без использования cdx файлов?
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35353605
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не pro в foxВ каких случаях данный структурный файл подключается, а в каких нет?
Посмотрите здесь

Индекс

не pro в foxИмеется система позволяющая выгружать данные в dbf файл. В некоторых случаях при открытии dbf файла требуется cdx файл. Т.е. вопрос наверное звучит так: индексный файл создается автоматически при создании dbf файла или это реализация программистов писавших систему - возможна запись в файл dbf без использования cdx файлов?
Это реализация программистов писавших систему.

Можно выгружать в файл DBF без индекса. Можно выгружать в файл DBF со структурным индексом. Можно выгружать в файл DBF без индекса, но создать дополнительные НЕ стуркутурные индексы.
...
Рейтинг: 0 / 0
Выборка данных из таблицы
    #35354050
не pro в fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ - спасибо!
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка данных из таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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