【问题标题】:SQL query joining tables from different fdb databasesSQL 查询连接来自不同 fdb 数据库的表
【发布时间】: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 以仅显示具有活动状态的员工。我该怎么做?

【问题讨论】:

    标签: sql firebird jointable firebird2.1


    【解决方案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 以在外部数据源上也执行一条语句,但不可能在不同数据库中拥有单个查询引用表。

      您有以下选择:

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

      【讨论】:

      • 我明白了...我不能在 firebird 中执行此操作...我要尝试临时表方法。时间标记
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2014-10-05
      相关资源
      最近更新 更多