Toàn bộ bên ngoài Tham gia vào MS Access


11

Tôi có hai danh sách nhân viên:

List A:

StaffID   Supervisor
====================
0001234         NULL
0001235      0001234
0001237      0001234
0001239      0001237

List B:

StaffID   Supervisor
====================
0001234         NULL
0001235      0001234
0001238      0001235
0001239      0001235

Và tôi cần đầu ra sau:

StaffID   SupervisorA   SupervisorB
===================================
0001234          NULL          NULL
0001235       0001234       0001234
0001237       0001234          NULL
0001238          NULL       0001235
0001239       0001237       0001235

Lưu ý rằng ID nhân viên từ Danh sách A và Danh sách B đã được hợp nhất thành một danh sách duy nhất, không lặp lại và tôi đã hợp nhất hai chi tiết giám sát có thể không khớp giữa hai danh sách.

Truy vấn không phải là tốt đẹp. Tôi có ~ 8000 hồ sơ trong mỗi danh sách và tôi sẽ chạy nó tốt đẹp. Tôi rất vui khi thực hiện một số thao tác Excel nhỏ sau đó nếu cần thiết.

Tôi muốn thực hiện tham gia đầy đủ, nhưng cửa sổ thuộc tính của trình thiết kế truy vấn truy cập trên liên kết cho phép tôi chọn TẤT CẢ từ bảng A và khớp từ bảng B, TẤT CẢ từ bảng B và chỉ khớp với bảng A hoặc chỉ khớp với bảng A và B.

Tôi chắc chắn rằng điều này rất đơn giản để làm, nhưng tôi rất hiếm khi sử dụng MS Access.

Tôi có hai truy vấn cho đến nay không cung cấp cho tôi những gì tôi muốn. Tôi muốn kết hợp chúng trong tham gia bên ngoài đầy đủ, vì Access sẽ không cho tôi một tùy chọn, nhưng không biết làm thế nào:

SELECT ListA.*, ListB.*
FROM ListA LEFT JOIN ListB ON ListA.[StaffID] = ListB.StaffID;

SELECT ListA.*, ListB.*
FROM ListB LEFT JOIN ListA ON ListB.[StaffID] = ListA.StaffID;

Câu trả lời:


10

Lần cuối cùng tôi chơi với Access là khi 2003 là một điều mới mẻ, vì vậy điều này có thể không hoàn toàn chính xác đến từng chi tiết. Tuy nhiên, những gì bạn cần làm là đi đến trình thiết kế truy vấn, thay đổi dạng xem thành "SQL" (nghĩa là nhập văn bản thô) và sau đó bạn muốn UNIONhai truy vấn nối trái của mình với nhau, ví dụ:

SELECT ListA.*, ListB.*
FROM ListA LEFT JOIN ListB ON ListA.[StaffID] = ListB.StaffID
UNION
SELECT ListA.*, ListB.*
FROM ListB LEFT JOIN ListA ON ListB.[StaffID] = ListA.StaffID

Tôi thích rằng câu trả lời có thể được rút gọn thành một từ: "UNION", đó chính xác là những gì tôi muốn :)
Ozzah

1
Không vấn đề gì. Sẽ thật tuyệt nếu Access hỗ trợ đầy đủ các kết nối bên ngoài, nhưng cũng thật tuyệt nếu tôi cũng có một con ngựa. (PS: Thậm chí đừng hỏi làm thế nào để tham gia chéo trong Access, điều đó thật tồi tệ.)
Simon Righarts

1
SELECT S.StaffId
     , ListA.Supervisor AS SupervisorA 
     , ListB.Supervisor AS SupervisorB
FROM 
    ( SELECT StaffID
      FROM ListA 
    UNION 
      SELECT StaffID
      FROM ListB
    ) AS S
  LEFT JOIN ListA 
    ON ListA.StaffID = S.StaffID
  LEFT JOIN ListB 
    ON ListB.StaffID = S.StaffID

0

Bạn đã thử thiết kế truy vấn trong chế độ SQL thay vì sử dụng chế độ xem của nhà thiết kế chưa?

Nếu bạn đang sử dụng Access 2003 / XP / 2000/97 thì hãy xem cái này: http://www.techonthenet.com/access/queries/view_sql.php

Nếu bạn đang sử dụng Access 2007/2010, bạn có thể thực hiện việc này bằng cách nhấp vào mũi tên trên nút Xem ở bên trái của dải băng. Sau đó bấm vào Chế độ xem SQL.


0
SELECT ListA.*, ListB.*
FROM ListA LEFT JOIN ListB ON ListA.[StaffID] = ListB.[StaffID]
UNION
SELECT ListA.*, ListB.*
FROM ListA RIGHT JOIN ListB ON ListA.[StaffID] = ListB.[StaffID];

0
SELECT ListA.staffID, ListA.Supervisor, ListB.Supervisor
FROM ListA LEFT JOIN ListB ON ListA.staffID = ListB.staffID
WHERE (((ListB.staffID) Is Null))
UNION
SELECT ListB.staffID, ListA.Supervisor, ListB.Supervisor
FROM ListA RIGHT JOIN ListB ON ListA.staffID = ListB.staffID
WHERE (((ListA.staffID) Is Null))
UNION
SELECT ListA.staffID, ListA.Supervisor, ListB.Supervisor
FROM ListA INNER JOIN ListB ON ListA.staffID = ListB.staffID
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.