SQL 查询连接来自不同 fdb 数据库的表
Posted
技术标签:
【中文标题】SQL 查询连接来自不同 fdb 数据库的表【英文标题】:SQL query joining tables from different fdb databases 【发布时间】:2015-07-31 00:07:58 【问题描述】:我有 2 个 fdb 数据库 company.fdb
和 timeAtt.fdb
company.fdb
包含staffDetail
表
staffId - 001
staffName - Andy
staffStatus - Active
timeAtt.fdb
contains 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 block
和execute 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 数据库的表的主要内容,如果未能解决你的问题,请参考以下文章