เต็มรูปแบบเข้าร่วมใน MS Access


11

ฉันมีรายชื่อพนักงานสองคน:

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 ได้รับการรวมเป็นรายการเดียวที่ไม่ซ้ำกันและฉันได้รวมรายละเอียดผู้ควบคุมสองคนซึ่งอาจไม่ตรงกันระหว่างสองรายการ

แบบสอบถามไม่จำเป็นต้องดี ฉันมีระเบียนประมาณ 8000 รายการในแต่ละรายการและฉันจะทำให้มันดี ฉันยินดีที่จะทำการจัดการ Excel เล็กน้อยภายหลังหากจำเป็น

ฉันต้องการทำการเข้าร่วมเต็มรูปแบบ แต่หน้าต่างคุณสมบัติตัวออกแบบคิวรีการเข้าถึงในการเข้าร่วมช่วยให้ฉันสามารถเลือกทั้งหมดจากตาราง A และการจับคู่จากตาราง B, ทั้งหมดจากตาราง B และการจับคู่จากตาราง A หรือเฉพาะที่ตรงกับทั้งสอง และบี

ฉันแน่ใจว่ามันง่ายมากที่จะทำ แต่ฉันไม่ค่อยใช้ 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;

คำตอบ:


10

ครั้งสุดท้ายที่ฉันเล่นกับ 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

ฉันรักที่คำตอบที่สามารถลดลงไปหนึ่งคำ: "ยูเนี่ยน" ซึ่งเป็นสิ่งที่ฉันต้องการ :)
Ozzah

1
ไม่มีปัญหา. มันจะดีถ้า Access รองรับการรวมภายนอกเต็ม แต่มันก็ดีถ้าฉันมีม้าด้วย (PS: อย่าแม้แต่จะถามว่าจะทำ cross cross เข้าใน Access ได้อย่างไรมันช่างน่ากลัวพอสมควร)
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

คุณได้ลองออกแบบแบบสอบถามในโหมด SQL แทนที่จะใช้มุมมองออกแบบหรือไม่

หากคุณใช้ Access 2003 / XP / 2000/97 ให้ดูที่: http://www.techonthenet.com/access/queries/view_sql.php

หากคุณใช้ Access 2007/2010 คุณสามารถทำได้โดยคลิกที่ลูกศรที่ปุ่มมุมมองด้านซ้ายของริบบิ้น จากนั้นคลิกมุมมอง 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.