2015-05-19 12 views
5

Ho 2 database FDB company.fdb e timeAtt.fdbquery SQL che unisce le tabelle da diversi database FDB

company.fdb contiene staffDetail tavolo

staffId  - 001 
staffName  - Andy 
staffStatus - Active 

timeAtt.fdb contiene staffAtt tavolo

staffId   - 001 
staffName  - Andy 
timeIn   - 07:30 
timeOut   - 04:30 
LI    - X (late in) 
AB    - X (absent) 
remarks   - Emergency leave 

Ora, mi piacerebbe per vedere il personale che era assente solo chi Ho fatto in questo modo

SELECT staffId,staffName,remarks FROM timeAtt.fdb WHERE AB = 'X' 

Ma il problema è che la query mostra anche il personale inattivo. Così ho bisogno di unirsi staffAtt da timeAtt.fdb e staffDetail da company.fdb per visualizzare solo il personale con qualifica di socio effettivo. Come lo posso fare?

risposta

2

Non è possibile. In Firebird è possibile unire solo le tabelle nello stesso file di database. Firebird 2.5 ampliato EXECUTE STATEMENT di eseguire anche una dichiarazione sul un'origine dati esterna, ma avente un singolo tabelle di riferimento ricerca in database diversi non è possibile.

sono disponibili le seguenti opzioni:

  1. creare una tabella temporanea, copiare i dati necessari in quella tabella temporanea e poi unirsi alla tabella temporanea,
  2. unire il database in uno.
+0

Vedo ... non posso farlo in Firebird ... Proverò il metodo di tabella temporanea. Tq Mark – WaN

2

Come Mark note non è possibile unirsi a loro direttamente. Ma puoi ancora usare un'istruzione DSQL per ottenere quello che vuoi.

Usa execute block e execute statement insieme. Ecco un esempio.

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 
Problemi correlati