SQL 查询来自不同 fdb 数据库的连接表
SQL query joining tables from different fdb databases
我有 2 个 fdb 数据库 company.fdb
和 timeAtt.fdb
company.fdb
包含 staffDetail
table
staffId - 001
staffName - Andy
staffStatus - Active
timeAtt.fdb
包含staffAtt
table
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
以仅显示处于活动状态的员工。我该怎么做?
你不能。在 Firebird 中,您只能在同一个数据库文件中加入 tables。 Firebird 2.5 扩展 EXECUTE STATEMENT
也可以在外部数据源上执行语句,但是在不同的数据库中具有单个查询引用 tables 是不可能的。
您有以下选择:
- 创建临时table,将您需要的数据复制到临时table,然后加入临时table,
- 将数据库合并为一个。
正如马克所说,您不能直接加入他们。但是你仍然可以使用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 个 fdb 数据库 company.fdb
和 timeAtt.fdb
company.fdb
包含 staffDetail
table
staffId - 001
staffName - Andy
staffStatus - Active
timeAtt.fdb
包含staffAtt
table
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
以仅显示处于活动状态的员工。我该怎么做?
你不能。在 Firebird 中,您只能在同一个数据库文件中加入 tables。 Firebird 2.5 扩展 EXECUTE STATEMENT
也可以在外部数据源上执行语句,但是在不同的数据库中具有单个查询引用 tables 是不可能的。
您有以下选择:
- 创建临时table,将您需要的数据复制到临时table,然后加入临时table,
- 将数据库合并为一个。
正如马克所说,您不能直接加入他们。但是你仍然可以使用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