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