powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с запросом
12 сообщений из 12, страница 1 из 1
Помогите с запросом
    #32537067
РАМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите с запросом
Имеется dbf база с 5 млн. записями и пять справочников к нему.

Основная база asd.dbf имеет 21 поля- А1...А21
Справочники имеют по два поля - code,name
При программном формировании запроса необходимо произвести выборку
данных и направить в временную таблицу связав с основной базой данные из справочников
Я сделал так

select asd.a1,asd.a2,spr.name,spr1.name... from asd,spr,spr... where asd.a3=spr.code,asd.a4=spr1.code....

Но запрос выдает ноль записей.
Пожалуйста кто знает поиогите
Заранее благодарю

Рам
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537085
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фраза where ... не через запятую, а через AND.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537098
Рам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здесь AND стоит просто забыл написать
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537117
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если возможна ситуация, когда в основной таблице НЕ указан код из какого-либо справочника или же стоит ссылка на несуществующий код справочника, но тем не менее такую запись надо выбрать, то необходимо использовать LEFT JOIN

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT ;
asd.a1, asd.a2, ;
NVL(spr1.name,PADR("Нет данных", 50 )) as name1, ;
NVL(spr2.name,PADR("Нет данных", 50 )) as name2, ;
...
FROM asd ;
LEFT JOIN spr1 ON asd.a3=spr1.code ;
LEFT JOIN spr2 ON asd.a4=spr2.code ;
...
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537133
Alex Sheff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Наверное это глюк самого фокса.
Я заметил похожую фигню когда вызываю Object List и пробую мышкой протащить вертикальный скролинг до самого низа - всегда остается парочка записей вне поля зрения (их можно увидеть только если дотащить повторно)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537194
Рам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том что запрос сначало я направляю в prg-файл
затем запускаю do sql.prg и у меня длина строки получается выше 255
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537213
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том что запрос сначало я направляю в prg-файл
затем запускаю do sql.prg и у меня длина строки получается выше 255

Это ты о чем? Длина одной команды в FoxPro ограничена 8,192 символами. Если ты собираешь одну команду из нескольких строк, то следует действовать так:

Код: plaintext
1.
2.
LOCAL lcString
lcString = "SELECT * FROM "+" myTab"
&lcString

То, что в кавычках - это символьные константы, длина которых действительно ограничена 255 символами. А вот lcString - это символьная переменная, длина которой ограничена 16,777,184 символами.

Если в lcString записана одна команда, то надо проконтролировать, чтобы количество символов в ней не превышало 8,192 символов.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537373
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А типы / длины / форматы полей первичных и внешних ключей полностью совпадают?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537404
РАМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал такой запрос ну очень медленно выполняется
а мне нужно такие запросы обрабатывались в моем поисковике

SELECT Ugon.a4, Ugon.a6, Ugon.a7, Ugon.a8, Ugon.a23, Ugon.a24, Ugon.a25,;
Ugon.a26, Ugon.a27, Ugon.a28, Ugon.a29, Ugon.a30, Ugon.a31, Ugon.a64, Ugon.a65,;
Ugon.a67, Region.region, Indx.indx, Sprcvet.sprcvet, Rezroz.rezroz,;
Vu_amt.vu_amt;
FROM ;
ugon ;
LEFT OUTER JOIN region ;
ON Ugon.a1 = Region.code ;
LEFT OUTER JOIN indx ;
ON Ugon.a63 = Indx.code ;
LEFT OUTER JOIN sprcvet ;
ON Ugon.a32 = Sprcvet.code ;
LEFT OUTER JOIN rezroz ;
ON Ugon.a9 = Rezroz.code ;
LEFT OUTER JOIN vu_amt ;
ON Ugon.a5 = Vu_amt.code
where d1.a28='2222' and d1.a29='2333'
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537422
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так этому помочь можно.
Завести в каждом справочнике строку "Значение не определено" (с PK=0, например), а в основной таблице вместо set null на внешние ключи поставить условие set default на 0. И жить без left join'ов. ;-)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537433
Рам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пояснее пожалуйста если можно
...
Рейтинг: 0 / 0
Помогите с запросом
    #32537473
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яснее?

Пусть у тебя поле a1 связано со справочником spr1, a2 с spr1 и т.д.

Код: plaintext
1.
2.
3.
4.
5.
6.
for i =  1  to N
  spri = 'spr'+ltrim(str(i))
  fldi = 'a'+ltrim(str(i))
  insert into (spri) (code,name) values ( 0 ,'!Неизвестно!')
  select asd
  replace (fldi) with  0  for isnull(eval(fldi))
next

После этого любая запись основной таблицы окажется гарантированно связана со всеми справочниками - и первый вариант запроса (или же вариант ВладимираМ, но с INNER JOIN'ами вместо LEFT'ов) отработает как надо. Оптимизируется этот вариант гораздо лучше, значит, и выполняться будет быстрее.

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


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