2015-05-19 17 views
5

tôi có 2 cơ sở dữ liệu FDB company.fdbtimeAtt.fdbtruy vấn SQL tham gia bảng từ cơ sở dữ liệu FDB khác nhau

company.fdb chứa staffDetail bảng

staffId  - 001 
staffName  - Andy 
staffStatus - Active 

timeAtt.fdb chứa staffAtt bảng

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

Bây giờ, tôi muốn để xem các nhân viên vắng mặt h tôi đã làm theo cách này

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

Nhưng vấn đề là, truy vấn cũng hiển thị nhân viên không hoạt động. Vì vậy, tôi cần tham gia staffAtt từ timeAtt.fdbstaffDetail từ company.fdb để chỉ hiển thị các nhân viên có trạng thái hoạt động. Làm thế nào tôi có thể làm điều đó?

Trả lời

2

Bạn không thể. Trong Firebird, bạn chỉ có thể tham gia các bảng trong cùng một tệp cơ sở dữ liệu. Firebird 2.5 mở rộng EXECUTE STATEMENT cũng để thực hiện một tuyên bố trên một nguồn dữ liệu bên ngoài, nhưng có một bảng tham chiếu truy vấn đơn trong cơ sở dữ liệu khác nhau là không thể.

Bạn có các tùy chọn sau:

  1. Tạo một bảng tạm thời, sao chép các dữ liệu bạn cần vào đó bảng tạm thời và sau đó tham gia vào bảng tạm thời,
  2. Merge cơ sở dữ liệu thành một.
+0

Tôi hiểu ... tôi không thể làm điều này trong firebird ... Im sẽ thử phương thức bảng tạm thời. Tq Mark – WaN

2

Vì ghi chú đánh dấu, bạn không thể trực tiếp tham gia. Nhưng bạn vẫn có thể sử dụng một tuyên bố DSQL để có được những gì bạn muốn.

Sử dụng execute blockexecute statement cùng nhau. Đây là một mẫu.

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 
Các vấn đề liên quan