Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помогите с запросом (UNION ALL и NULL) / 4 сообщений из 4, страница 1 из 1
08.06.2004, 09:17
    #32551722
Kolya1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом (UNION ALL и NULL)
Здравствуйте.
Понадобилось мне написать запрос вроде:
SELECT NULL, field1 FROM table1 UNION ALL SELECT field1, field2 FROM table2
А VFP говорит, что он не может определить тип колонки. Это он, видимо, определяет тип по первой выборке. Если опреации выборки поменять местами, то будет все ОК. Но мне надо именно так. Есть ли пути решения проблемы?
...
Рейтинг: 0 / 0
08.06.2004, 09:28
    #32551754
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом (UNION ALL и NULL)
В запросах с union-ами результирующая таблица/курсор строится на первом из всех объединяемых запросов. При этом поля получают и длины, и типы. Null сам по себе - неопределенный тип. Поэтому "разборщику" запросов в такой, как у тебя возникла, ситуации нада помогать.

Например, попробуй так (я предполагаю далее, что table2.field1 - строковое):

m.ll=len(table2.field1)
SELECT padr(NULL,m.ll),field1 FROM table1 UNION ALL SELECT field1, field2 FROM table2

Ну, или что-то в этом роде. Теперь "разборщик" должен понять, что, несмотря на содержимое (Null), поле должно быть текстовым, и определенной длины.
...
Рейтинг: 0 / 0
08.06.2004, 09:58
    #32551804
Kolya1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом (UNION ALL и NULL)
Спасибо, так работает. Я тоже думал насчет подобного варианта, но вместо PADR пытался использовать ф-ию LEFT, а с ней не работает. Но все дело в том, что запрос строится динамически и тип поля может быть целый, с плавающей точкой, символьный, дата и мемо.
...
Рейтинг: 0 / 0
08.06.2004, 10:16
    #32551829
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом (UNION ALL и NULL)
Насчет мемо - труднее всего, по-моему - ну попробуй, скажем, padr(null,256). Целый и с плавающей точкой - может помочь такое выражение: null+0000000.000000000 (сколько надо) (правда получится и не целое, и не с плавающей точкой, но что-то числовое ;-)).
С датой - ctod (не уверен).
Все это задавать в динамике, определяя типы на лету.
А вообще-то, ВладимирМ недавно приводил решение, похожее вот на это:
Код: plaintext
1.
2.
3.
4.
create cursor xx(x1 t1(l1), x2 t2(l2))
SELECT x1, x2 FROM xx UNION ALL ;
SELECT NULL, field1 FROM table1 UNION ALL ;
SELECT field1, field2 FROM table2

t1, t2 и l1, l2 - соответственно, типы и длины полей x1, x2. Их задаешь какими надо, а уж они потом и определяют типы полей результирующего курсора.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помогите с запросом (UNION ALL и NULL) / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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