2015-05-19 17 views
5

Ich habe 2 FDB Datenbanken company.fdb und timeAtt.fdbSQL-Abfrage Tabellen aus verschiedenen FDB Datenbanken

company.fdb enthält staffDetail Tabelle

staffId  - 001 
staffName  - Andy 
staffStatus - Active 

timeAtt.fdb enthält staffAtt Tabelle

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

Jetzt verbinden, würde Ich mag das Personal zu sehen, das nur abwesend war h ich habe es so gemacht

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

Aber das Problem ist, die Abfrage auch inaktive Mitarbeiter anzeigen. Also muss ich staffAtt von timeAtt.fdb und staffDetail von company.fdb beitreten, um nur Personal mit aktivem Status anzuzeigen. Wie kann ich das machen?

Antwort

2

Sie können nicht. In Firebird können Sie nur Tabellen in derselben Datenbankdatei verbinden. Firebird 2.5 erweitert EXECUTE STATEMENT, um auch eine Anweisung auf einer externen Datenquelle auszuführen, aber eine einzelne Abfrage Referenztabellen in verschiedenen Datenbanken ist nicht möglich.

Sie haben folgende Möglichkeiten:

  1. Erstellen Sie eine temporäre Tabelle, kopieren Sie die Daten, die Sie in diese temporäre Tabelle müssen und dann in die temporäre Tabelle beitreten,
  2. die Datenbank zu einer Einheit verschmelzen.
+0

Ich sehe ... Ich kann dies in Firebird tun ... Ich werde versuchen, die Temp-Tabelle-Methode. Tq Mark – WaN

2

Wie Mark merkt, können Sie ihnen nicht direkt beitreten. Aber Sie können immer noch eine DSQL-Anweisung verwenden, um zu bekommen, was Sie wollen.

Verwenden Sie execute block und execute statement zusammen. Hier ist ein Beispiel.

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