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

时间:2015-05-19 08:54:10

标签: sql firebird jointable firebird2.1

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

company.fdb包含staffDetail

staffId       - 001
staffName     - Andy
staffStatus   - Active

timeAtt.fdb包含staffAtt

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'

但问题是,查询还显示非活动人员。因此,我需要加入来自staffAtt的{​​{1}}和来自timeAtt.fdb的{​​{1}},以仅显示处于有效状态的员工。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

正如Mark所说,你不能直接加入他们。但是你仍然可以使用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

答案 1 :(得分:2)

你做不到。在Firebird中,您只能在同一个数据库文件中连接表。 Firebird 2.5扩展EXECUTE STATEMENT也可以在外部数据源上执行语句,但是不可能在不同的数据库中使用单个查询引用表。

您有以下选择:

  1. 创建临时表,将所需数据复制到该临时表中,然后加入临时表
  2. 将数据库合并为一个。