Query

MS Access 中的完全外部聯接

  • November 17, 2017

我有兩個員工名單:

List A:

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

List B:

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

我需要以下輸出:

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

請注意,列表 A 和列表 B 中的員工 ID 已合併為一個不重複的列表,並且我已合併了兩個主管詳細資訊,這兩個列表之間可能不匹配。

查詢不必很好。我在每個列表中有大約 8000 條記錄,我會很好地執行它。如有必要,我很樂意在之後進行一些小的 Excel 操作。

我想做一個完全連接,但連接上的 Access 查詢設計器屬性視窗允許我從表 A 中選擇 ALL 並從表 B 中匹配,從表 B 中選擇 ALL 並從表 A 中匹配,或者僅在兩個 A 中都匹配的那些和 B。

我確信這很簡單,但我很少使用 MS Access。

到目前為止,我有兩個查詢沒有給我想要的。我想將它們組合到完整的外部連接中,因為 Access 不會給我一個選項,但不確定如何:

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;

我上一次玩 Access 是在 2003 年是熱門新事物的時候,所以這可能並不完全準確到每個細節。但是,您需要做的是轉到查詢設計器,將視圖更改為“SQL”(即原始文本條目),然後您希望將UNION兩個左連接查詢放在一起,例如

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

引用自:https://dba.stackexchange.com/questions/14441