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

Posted

技术标签:

【中文标题】SQL 查询连接来自不同 fdb 数据库的表【英文标题】:SQL query joining tables from different fdb databases 【发布时间】:2015-07-31 00:07:58 【问题描述】:

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

company.fdb 包含staffDetail

staffId       - 001
staffName     - Andy
staffStatus   - Active

timeAtt.fdbcontains 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'

但问题是,查询还显示非活动人员。所以我需要从timeAtt.fdb 加入staffAtt 和从company.fdb 加入staffDetail 以仅显示具有活动状态的员工。我该怎么做?

【问题讨论】:

【参考方案1】:

正如 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

【讨论】:

【参考方案2】:

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

您有以下选择:

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

【讨论】:

我明白了...我不能在 firebird 中执行此操作...我要尝试临时表方法。时间标记

以上是关于SQL 查询连接来自不同 fdb 数据库的表的主要内容,如果未能解决你的问题,请参考以下文章

如何内部连接来自不同数据上下文的表? [复制]

比较来自两个不同数据库的表 SQL Developer

Mysqli 连接来自 2 个不同数据库的表

SQL 查询有条件地连接来自不同数据库的列

使用来自两个不同数据库的两个表使用 JOOQ 构建左连接查询

如何在sql中连接来自不同表的两个字段