Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Здравствуйте! Такая проблема. Есть запрос на объединение курсора с таблице, все поля типа char, длина полей одинаковая, но курсор получается пустой. При этом если объединять по полю name, то все работает, но когда добавляешь второе поле, то хрен. Вот аналог кода.
Select cursor1.name,table1.adress; From cursor1; Inner join table1; On cursor1.name+cursor1.dom=; table1.name+table1.number; Into cursor cursor2 |
Re: Inner join не срабатывает | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Наверное, без примера с реальными данными не угадать...
|
Re: Inner join не срабатывает | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Вы считаете вот ЭТО нормальным логическим выражением? Как его должен, по вашему мнению, обработать фокс? И словами " добавляешь второе поле" вы называете использование "cursor1.name+cursor1.dom" вместо "cursor1.name"? ------------------ Лень - это неосознанная мудрость. |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Да, всегда все срабатывало и фокс нормально отрабатывал, но конкретно в этом случае нет.
Насчет второго поля вы правильно поняли.Даже если вместо плюсов поставлю AND все равно. Исправлено 2 раз(а). Последнее : natashik319, 20.10.17 09:45 |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Так, ладно, с AND вроде сработало в этот раз.. странно конечно..
|
Re: Inner join не срабатывает | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Не верю! (С) Цитата:То есть так: cursor1.name and cursor1.dom=; table1.name and table1.number; ? Считаете это корректным логическим выражением? ------------------ Лень - это неосознанная мудрость. |
Re: Inner join не срабатывает | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
А вроде все работает... Точку с запятой - просто не скопировался перевод строки, наверное.
|
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Смысл мне врать, скажите пожалуйста, если я просила помощи? В ответ вижу лишь язвительные высказывания с вашей стороны.
Нет, не так, само собой.Не держите меня за дуру, пожалуйста. Cursor1.name=table1.name and ; cursor1.dom=table1.number. |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Спасибо) да, похоже на то) я же говорю, все отрабатывает фокс) уже сделала, получилось)) |
Re: Inner join не срабатывает | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Конкатенировать две строки, а потом их сравнивать? А не сильно затратно получается? А индексы по выражению конкатенации есть?
|
Re: Inner join не срабатывает | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Во-первых, где увидено обвинение во вранье? Во-вторых, где увидены "язвительные высказывания"? Может уменьшим количество мнительности и экспрессии? Цитата:А кто-то держит? Доказательства будут? Цитата:А про такое выражение кто-то что-то где-то говорил? Может потрудимся и научимся таки правильно излагать свои мысли? ------------------ Лень - это неосознанная мудрость. |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
1
Исправлено 1 раз(а). Последнее : natashik319, 20.10.17 15:41 |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Вы серьезно? Какая именно моя фраза является для вас не понятной? Вы сами сказали, что не верите мне. Ни эта ли ваша фраза напрямую указывает на то, что я, якобы, вру? Перечитайте, не найдете ничего язвительного, то тогда и говорить не о чем. Кстати, я абсолютно спокойна. Не знаю, где вы увидели экспрессию в моей печатной речи. Цитата:Вы говорили про такое выражение. Цитата:Естественно, что нет, поэтому я и написала корректный и логический код. Но и мой первый вариант был работающий,хотя вы же мне не верите. Еще раз, я просила помощи, от вас ее не было. Думаю, стоит закончить этот разговор, вопрос закрыт, проблема решена. Исправлено 2 раз(а). Последнее : natashik319, 20.10.17 15:58 |
Re: Inner join не срабатывает | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Ой зря наезжаете!
Так никогда не могло работать! Чему и не поверили! А Олег привел рабочий код. Замените в его коде, на ваше
Синтаксис в программировании... наше все))) По мне так перенос строки тут явно не помогает читабельности Я бы написал так)
Вариант с and мне лучше) ------------------ Исправлено 1 раз(а). Последнее : Аспид, 20.10.17 16:09 |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
А разве это наезд с моей стороны? Можно же было сразу человеку нормально ответить, что так и так, считаю что неправильно. Лучше сделать так. Нет же, надо обязательно съязвить. Цитата:У меня все срабатывает, говорю же. Это не мой код, он работал несколько лет, но сейчас нужно было сменить источник данных для курсора, а соответственно названия полей в курсоре, что я и сделала. И все перестало работать. |
Re: Inner join не срабатывает | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Вообще-то фокс не исполнит запрос где нечто типа
Но в общем и целом никакой проблемы в выражении
Естественно что такого рода сравнения строк имеют свои нюансы. Во-первых регистр. Если не работать при COLLATE=RUSSIAN, то "Красная", "красная" и "КРАСНАЯ" это будут три совершенно разные строки. Во-вторых выравнивание, или ведущие/хвостовые пробелы. В том же поле с номерами домов может быть вбито как "1", так и " 1" - и для фокса это, конечно же, будут совершенно разные строки. Хвостовые пробелы не должны влиять для char полей одного размера - т.е. любая строка будет дополнена пробелами до размера поля. Но если попытаться "чинить" результат запроса применяя LTRIM/ALLTRIM, то уже и хвостовые пробелы будут иметь значение - а точнее настройка SET ANSI, влияющая на сравнение строк разного размера... Кроме того, хотя это и наименее вероятная причина "проблем", на результат может влиять наличие у таблицы индексного файла - точнее его "некорректность", "испорченность" - если фокс станет для оптимизации использовать индекс, а он не соответствует данным в таблице, ну тут то и получится "странный результат". ------------------ WBR, Igor |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Возможно и так, потому что поля источников идентичны. Ну т.е. тут точно проблема не в них самих. Надо будет в понедельник тогда заново сделать индексацию таблицы. Спасибо, думаю вы правы. |
Re: Inner join не срабатывает | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Тут не "заново" (REINDEX) сделать имелось ввиду, а посмотреть:
- SET("COLLATE"), SET("ANSI"), что-то еще - посмотреть какие индексы есть в таблицах (если они "большого" размера) - оценить выражения поиска (и JOIN) с имеющимися выражениями индекса и COLLATE (скорее всего COLLATE=RUSSIAN, раз исходный код на регистре не заморачивается) - если все достаточно быстро и так работает, то лучше пока ничего не менять ) |
Re: Inner join не срабатывает | |
---|---|
natashik319 Автор Сообщений: 30 Дата регистрации: 16.05.2017 |
Поняла) спасибо, да с And работает, но ради интереса посмотрю ваш вариант) |
Re: Inner join не срабатывает | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Если работает с AND и НЕ работает по "сцепке", при том размеры полей гарантировано одинаковые, то дело скорее всего в индексе...
------------------ WBR, Igor |
© 2000-2024 Fox Club  |