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

问题描述 投票:0回答:3

我有 2 个 fdb 数据库

company.fdb
timeAtt.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
中的
timeAtt.fdb
staffDetail
中的
company.fdb
来仅显示处于活动状态的员工。我怎样才能做到这一点?

sql firebird join firebird2.1
3个回答
9
投票

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

同时使用

execute block
execute statement
。这是一个例子:

execute block
returns (
   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

2
投票

你不能。在 Firebird 中,您只能连接同一数据库文件中的表。 Firebird 2.5 扩展了

EXECUTE STATEMENT
,也可以在外部数据源上执行语句,但在不同数据库中使用单个查询引用表是不可能的。

您有以下选择:

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

0
投票

这是可能的。 使用该过程作为数据库 timeAtt.fdb 的视图

© www.soinside.com 2019 - 2024. All rights reserved.