![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В одном запросе несколько баз ... [D6, IB6.x]
korvin © (2005-01-29 12:50:00)Можно ли использовать в одном запросе поля таблиц из разных баз данных? Есть поля по которым можно было бы установить связь и конечно нет проблем если таблицы в одной базе, а как поступить в данном случае?
Если есть возможность, приведите пожалуйста пример в общем виде.
Rule (2005-01-29 15:36:00) [1]Alexandr © (29.01.05 15:31) [11]
именно так, поэтому в данном случае оптимальный вариант - это программными методаим обходить эту проблемму, а вообще не должно возникать таких ситуаций, а если возникла, значит что-то неправильно спроектировано изначально ... ИМХО конечно ...
Alexandr (2005-01-29 15:31:00) [2]точно. Помню же, где читал на этот счет.
А вывод тут такой, что как в конкретном случае BDE выполнит запрос известно только BDE. И далеко не всегда это будет более-менее оптимально.
А локальный SQL у него достаточно примитивен.
Поэтому уж проще самому формировать.
Rule (2005-01-29 15:24:00) [3]по этому поводу хорошая статья есть
http://ibase.ru/devinfo/bde.htm
Alexandr (2005-01-29 15:20:00) [4]хм... ну мож такой запрос развернет еще.
Но если чуть посложнее?
Anatoly Podgoretsky (2005-01-29 15:11:00) [5]Вот именно запрос в каждую базу, а не перекачивание всей таблицы, как ты утверждал. На каждую T1 будут вытянута только те записи, которые нужны, с тем же ИД, а не вся таблица. Точно также будет и для одной базы. И насчет сервера обязательно будет его использовать, не умеет БДЕ работать напряму с файлами Интербейс, да его никто и не пустить к этим файлам. Ты не путай с файл серверными базами. Примерно это будет выглядеть так, для второй таблицы будет выполнен такой запрос SELECT FROM T2 WHERE fLD1 = значение из T1, никаких всех данных не потянет. Объединение конечно будет произведено локально.
Alexandr (2005-01-29 15:00:00) [6]
> alias1:Tbl1.Fld1 AS T1, :alias2:Tbl2.Fld1 AS T2 where T1.Fld1=T2.Fld1
не... мы как будто про разное говорим...
у него же базы клиент-серверные и можно ожидать выполнеия запроса в каждую базу и локального объединения результата запросов. Однако BDE не будет использовать сервер для такого объединения, а объединит своим движком, а свой движок у него только с файловыми базами работает.
Значит он вытянет обе таблицы целиком и сам уже потом безовсяких индексов будет объединять их своим движком.
А чтобы как-то распараллелить запрос по максимуму на серверы и потом только собрать из 2 ограниченных выборок результат, это надо очень серьезную логику. И в BDE оно не укладывается.
Anatoly Podgoretsky (2005-01-29 14:52:00) [7]Очень просто раскрутит, например select :alias1:Tbl1.Fld1 AS T1, :alias2:Tbl2.Fld1 AS T2 where T1.Fld1=T2.Fld1
Alexandr (2005-01-29 14:21:00) [8]а разве не так?
хочется посмотреть, как BDE раскрутит сложный гетерогенный запрос в 2 запроса для разных серверов.
Anatoly Podgoretsky (2005-01-29 14:16:00) [9]Alexandr © (29.01.05 12:58) [1]
Сам придумал "Но BDE в данном случае естественно убдет на клиентя тянуть таблицы целиком"
Alexandr (2005-01-29 13:56:00) [10]это самый правильный вариант, раз уж действительно так надо.
И транзакциями управлять сможешь, и на сервер посылать сразу правильный запрос смоше, чтоб не тянуть все таблицы.
korvin (2005-01-29 13:32:00) [11]Спасибо за ответ, хоть он меня и не радует.
Буду создавать сборную как советуете.
Alexandr (2005-01-29 12:58:00) [12]нельзя.
Только собирать результирующую таблицу на клиенте.
Вот в BDE есть возможности для этого.
Но BDE в данном случае естественно убдет на клиентя тянуть таблицы целиком, даже если реально надо всего пару записей.
Аналогично делают например Access или даже MSSQL.