:: Visual Foxpro, Foxpro for DOS
Re: Inner join не срабатывает
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
(Или во "всеми" нелюбимом COLLATE=RUSSIAN)
Ratings: 0 negative/0 positive
Re: Inner join не срабатывает
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Не вижу каким образом эта настройка сама по себе может повлиять на разное поведение
"Ленина"+"12а"="ленина"+"12А"
супротив
"Ленина"="ленина" AND "12а"="12А"
Вот на выбор/НЕвыбор индекса для оптимизации под VFP9 она повлиять может - ну так и собственно само использованное выражение на это первее всего влияет, о чём я и говорю


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Inner join не срабатывает
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Вобщето, без COLLATE=RUSSIAN Л от л НИКАКОЕ преобразование отличить не может
Ratings: 0 negative/0 positive
Re: Inner join не срабатывает
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Олег, давай вернёмся к самому началу. У автора вопроса вариант t1.fld1+t1.fld2=t2.fld1+t2.fld2 (1) работал ОТЛИЧНО от варианта t1.fld1=t2.fld1 AND t1.fld2=t2.fld2 (2)
Ну и каким боком к этому установка SET COLLATE?
Если бы у неё была проблема именно с этим - с регистром строк, то замена (1) на (2) ровным счётом ничего бы не изменила. Как "не работало" оно, так бы и продолжало "не работать".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Inner join не срабатывает
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я понял так, что у автора в конце концов работают оба варианта одинаково. Что-то с синтаксисом (точка с запятой) нелады были что-ли. Идею твою наконец понял, что в одном случае индекс используется, а в другом нет. Ранее (с одним полем) все работало, значит индекс по имени улицы использовался (если он есть) и исправен. При добавлении второго поля (поле1+поле2) вроде перестало работать, индекс в этом случае не используется (хотя хз, фокс может и сообразил как использовать индекс по имени улицы...). Также мы не знаем, есть ли индекс по номеру дома, и исправен ли он... Вобщем ситуация неясна.

Про COLLATE=RUSSIAN - да, он или есть, и применяется в коде проги, или не есть, и прога на него не расчитывает (скорее вариант 1). Но это мой любимый COLLATE, и меня на нем "зарубает время от времени"
Ratings: 0 negative/0 positive
Re: Inner join не срабатывает
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
По умолчанию после установки фокса стоит COLLATE=MACHINE, потому смею предположить что у 90% пользователей фокса используется именно MACHINE.
А для решения проблем регистра букв издавна применяли UPPER(выражение) - в некотором отношении это даже лучше чем COLLATE=RUSSIAN (ну как минимум размеры индексов по строковым полям заметно меньше будут). А главное что это очевидное, прямое решение - где надо ставим UPPER, где не надо - не ставим. В отличие от "скрытой" COLLATE которая работает везде, и если и меняется, то никак не в том же самом месте где прописан оператор сравнения (не в самом запросе, не в IF-e).


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 22.10.17 13:15
Ratings: 0 negative/0 positive
Re: Inner join не срабатывает
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
у горячих финских парней вотка закончилась?


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика