www.map-info.ru :: Просмотр темы - Селект по массиву констант, заранее неизвестной размерности
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Johnnie88



Зарегистрирован: 08.10.2010
Сообщения: 6

СообщениеДобавлено: Пн Дек 20, 2010 4:57 pm    Заголовок сообщения: Селект по массиву констант, заранее неизвестной размерности Добавить ответ со ссылкой на данный текст

Здравствуйте! При изучении среды программирования MapBasic столкнулся с такой проблемой:

Допустим нам надо выделить записи из таблицы TABLE1, в которых в колонке COL1 встречаются константы из массива M() размерностью 3. В этом случае строка запоса задается легко:

Select * from TABLE1 where COL1 = any (M(1), M(2), M(3)) into Selection

Но, что будет со строкой запроса, если размерность массива заранее неизвестна и зависит от предыдущих запросов?
Или что будет, если размерность массива констант равна не 3, а, например 10000? Неужели придётся прописывать строку запроса так:

Select * from TABLE1 where COL1 = any (M(1), M(2),..., M(10000)) into Selection

Хотелось бы узнать, есть ли в MB возможность прописать строку запроса для поиска записей, просто указав название массива?



Или, если такой возможности нет, то существует ли в MB функция (наподобии UNION в SQL) которая объединяет несколько запросов в одну выборку (что бы прогнать этот массив в цикле и получить нужную выборку)?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Пн Дек 20, 2010 10:18 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Поместите ваш массив во вторую таблицу и произведите обычную реляционную операцию пересечения множеств.
Внимательнее изучите синтаксис SELECT в MapBasic, там это есть.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Johnnie88



Зарегистрирован: 08.10.2010
Сообщения: 6

СообщениеДобавлено: Вт Дек 21, 2010 8:29 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Т.е. имеется ввиду создать таблицу, например, TABLE2, идентичную по структуре TABLE1. И в COL1 таблицы TABLE2 записать значения массива. Соответственно Селект будет выглядеть следующим образом:

Select * from TABLE1, TABLE2 where TABLE2.COL1 = TABLE1.COL1 into Selection

Я правильно Вас понял?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Дек 21, 2010 7:27 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Ну не обязательно идентичную по структуре. У таблиц достаточно совпадения ключевых полей (из которых состоит ключ).
А в целом, да, правильно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Johnnie88



Зарегистрирован: 08.10.2010
Сообщения: 6

СообщениеДобавлено: Чт Дек 23, 2010 2:33 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

У меня не получалось делать такие запросы по 2ум таблицам, разным по структуре. Выдавало какую-то ошибку...
Но всё равно спасибо! Проблема решена способом, описанным в третьем посте)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Дек 29, 2010 10:21 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

ну а если так
Select * from TABLE1 where TABLE1.COL1 in (select TABLE2.COL1 from TABLE2) into Selection
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru