Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос ВладимируМ: SELECT-SQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Владимир. Судя по Вашим ответам в разных форумах, Вы неплохо разбираетесь в VFP различных версий. Мой вопрос заключается в следующем: Пишу в VFP 5.0 достаточно простой Select: select a.zon,a.nam,a.opr,b.nam as oper,a.kat,c.nam as kategor ; from query a,opr b,kateg c; where a.opr=b.opr and a.kat=c.kat and !deleted() ; order by 1 ; into cursor Query1 и получаю невероятный (для меня) результат: в Query1 каждая запись исходного набора имеет несколько копий (т.е., если в Query была одна запись, то в Query1 их уже пять(!) ). Тот же результат получаюЮ если переписать select в виде: select a.zon,a.nam,a.opr,b.nam as oper,a.kat,c.nam as kategor ; from ((query a inner join opr b on a.opr=b.opr) inner join kateg c; on a.kat=c.kat) ; where !deleted() ; order by 1 ; into cursor Query1 Лечится это установкой distinct в select'e. Но почему я сразу не могу получить нужный мне набор записей? Что я делаю не так? Может быть поменять какие-то установки в среде? В FPD указанный первым Select срабатывает без проблем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2004, 07:31 |
|
||
|
Вопрос ВладимируМ: SELECT-SQL
|
|||
|---|---|---|---|
|
#18+
Не видя самих данных трудно сказать. Возможно, запрос работает правильно. В собственно запросе у Вас только одна ошибка. Функция Deleted() проверяет статус удаленной записи в текущей рабочей области . А при выполнении команды Select-SQL могут создаваться специфические временные таблицы, открывающиеся в своих рабочих областях. Т.е. использование фнкции Deleted() в запросах по нескольким таблицам в принципе недопустимо. Результат - непредсказуемый. Для отсечения записей помеченных как удаленные используют специальную глобальную настройку: SET DELETED ON Здесь несколько "нелогичная" настройка: ON - учитывает записи помеченные как удаленные, OFF - не учитывает (игнорирует) признак удаленной записи. Еще одна возможная причина глюка может заключаться в повреждении индексного файла. Повреждение индексного файла до версии VFP6SP5 может быть связано с использованием оптимистической буферизации. Для лечения необходимо дать команду REINDEX на все таблицы источники. Ну, и наконец, опять же вплоть до версии VFP6SP5 нельзя использовать настройку SET COLLATE отличную от MACHINE. В этом случае будет некорректно работать объединение по некоторым значениям числовых полей. Не попадут в выборку ряд записей. PS: правльнее писать подобные запросы через JOIN, хотя скобки в нем не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2004, 09:11 |
|
||
|
Вопрос ВладимируМ: SELECT-SQL
|
|||
|---|---|---|---|
|
#18+
Если для условия where a.opr=b.opr and a.kat=c.kat and !deleted() ; для одной записи из а выберется, например, 2 записи из в (по a.opr=b.opr) и 3 записи из с (по a.kat=c.kat), то в результирующей выборке будет 2*3=6 записей. Т.е произведение - каждая с каждой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2004, 09:38 |
|
||
|
Вопрос ВладимируМ: SELECT-SQL
|
|||
|---|---|---|---|
|
#18+
ВладимирМ прав, необходимо привести структуру таблиц и запроса. Возможно результирующая таблица денормализована (зависит от полей таблиц входящих в запрос, полей участвующих в выборке и результирующих полей). Надо четко представлять себе в каком виде будет результирующая таблица (форма). Возможно на этом наборе полей необходимо использовать DISTINCT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2004, 08:54 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32672472&tid=1595910]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 419ms |

| 0 / 0 |
