it-swarm.asia

انضمام خارجي كامل في MS Access

لدي قائمتين للموظفين:

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 بعد ذلك إذا لزم الأمر.

كنت أرغب في عمل صلة كاملة ، ولكن تسمح لي نافذة خصائص مصمم استعلام Access في الصلة باختيار ALL من الجدول A والمطابقة من الجدول B ، أو ALL من الجدول B والمطابقة من الجدول A ، أو فقط تلك التي تطابق في كل من 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;
11
Ozzah

آخر مرة لعبت فيها مع 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
10
Simon Righarts
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
1
ypercubeᵀᴹ
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
0
Manh Hung

هل حاولت تصميم الاستعلام في وضع SQL بدلاً من استخدام طريقة عرض المصمم؟

إذا كنت تستخدم Access 2003/XP/2000/97 ، فألق نظرة على هذا: http://www.techonthenet.com/access/queries/view_sql.php

إذا كنت تستخدم Access 2007/2010 ، فيمكنك القيام بذلك عن طريق النقر فوق السهم الموجود على الزر "عرض" على يسار الشريط. ثم انقر فوق عرض SQL.

0
Matty Bear
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
onedaywhen