1

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

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

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

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

whereusers_booksbooksare 数据库。

我收到一个错误:

SQL error code = -204
Table unknown
BOOKS.

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

4

1 回答 1

0

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
于 2021-02-26T08:58:20.627 回答