繁体   English   中英

如何连接两个 Firebird 数据库中的表?

[英]How to join tables in two Firebird databases?

目前我正在使用 Embarcadero C++Builder 10.3 社区版和 Firebird 和 FlameRobin 来创建一个简单的库项目来创建数据库。

到目前为止,我只需要使用连接到单个数据库的简单查询。 因此,我使用TFDConnectionTFDPhysFbDriverLink连接到.fdb文件。 然后, TFDQuery创建 SQL 命令和TDataSource 它工作得很好。

不幸的是,现在我必须加入两个表。 这个命令怎么写? 我试过这个:

SELECT * FROM users_books 
join books on
users_books.id_book = books.id

其中users_booksbooks是数据库。

我收到一个错误:

SQL error code = -204
Table unknown
BOOKS.

所以我认为我必须以某种方式同时连接到这两个数据库。 怎么做?

Firebird 数据库是孤立的,不知道其他数据库。 因此,无法使用正常的select语句跨数据库连接表。

您可以做的是使用 PSQL(过程 SQL),例如在EXECUTE BLOCK中。 然后,您可以使用FOR EXECUTE STATEMENT... ON EXTERNAL来循环另一个数据库中的表,然后使用FOR SELECT (反之亦然)“手动”连接本地表。

例如(假设远程数据库中有一个表user_books ,当前数据库中有一个表books ):

execute block
  returns (book_id integer, book_title varchar(100), username varchar(50))
as
begin
  for execute statement 'select book_id, username from user_books'
    on external 'users_books' /* may need AS USER and PASSWORD clause as well */
    into book_id, username do
  begin
    for select book_title from books where id = :book_id
      into book_title do
    begin
      suspend;
    end
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM