SQL-запрос, соединяющий таблицы из разных баз данных fdb

У меня есть 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, чтобы отображались только сотрудники с активным статусом. Как я могу это сделать?


person WaN    schedule 19.05.2015    source источник


Ответы (2)


Вы не можете. В Firebird вы можете соединять таблицы только в одном и том же файле базы данных. Расширенный Firebird 2.5 >EXECUTE STATEMENT, чтобы также выполнить оператор на внешнем источнике данных, но иметь единые справочные таблицы запросов в разных базах данных невозможно.

У вас есть следующие варианты:

  1. Создайте временную таблицу, скопируйте необходимые данные в эту временную таблицу, а затем присоединитесь к временной таблице,
  2. Объедините базу данных в одну.
person Mark Rotteveel    schedule 19.05.2015
comment
Ясно... я не могу сделать это в firebird... Я попробую метод временной таблицы. Метка ТК - person WaN; 19.05.2015

Как отмечает Марк, вы не можете присоединиться к ним напрямую. Но вы все равно можете использовать оператор 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
person Paul    schedule 27.05.2015