SQL 查询来自不同 fdb 数据库的连接表

SQL query joining tables from different fdb databases

我有 2 个 fdb 数据库 company.fdbtimeAtt.fdb

company.fdb 包含 staffDetail table

staffId       - 001
staffName     - Andy
staffStatus   - Active

timeAtt.fdb包含staffAtttable

staffId         - 001
staffName       - Andy
timeIn          - 07:30
timeOut         - 04:30
LI              - X (late in)
AB              - X (absent )
remarks         - Emergency leave

现在,我想查看缺席的员工,我是这样做的

SELECT staffId,staffName,remarks FROM timeAtt.fdb WHERE AB = 'X'

但问题是,查询还显示不活跃的员工。所以我需要加入 timeAtt.fdbstaffAttcompany.fdbstaffDetail 以仅显示处于活动状态的员工。我该怎么做?

你不能。在 Firebird 中,您只能在同一个数据库文件中加入 tables。 Firebird 2.5 扩展 EXECUTE STATEMENT 也可以在外部数据源上执行语句,但是在不同的数据库中具有单个查询引用 tables 是不可能的。

您有以下选择:

  1. 创建临时table,将您需要的数据复制到临时table,然后加入临时table,
  2. 将数据库合并为一个。

正如马克所说,您不能直接加入他们。但是你仍然可以使用DSQL语句来得到你想要的。

同时使用 execute blockexecute statement。这是一个示例。

execute block
returning (
   staffId integer,
   staffName varchar(100),
   remarks varchar(100)
   staffStatus varchar(10))
as
begin
   for SELECT staffId, staffName, remarks 
   FROM timeAtt 
   WHERE AB = 'X'
   into :staffId, :staffName, :remarks do begin

      execute statement 'select staffStatus from company where staffId = ' || staffId
      on external "your:connection:\string\and\db.fdb" as user FOO password BAR
      into :staffStatus;

      suspend;
   end
end