Vollständige äußere Teilnahme an MS Access


11

Ich habe zwei Mitarbeiterlisten:

List A:

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

und

List B:

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

Und ich brauche folgende Ausgabe:

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

Beachten Sie, dass die Personal-IDs aus Liste A und Liste B zu einer einzigen, sich nicht wiederholenden Liste zusammengeführt wurden und dass ich die beiden Supervisor-Details zusammengeführt habe, die möglicherweise nicht zwischen den beiden Listen übereinstimmen.

Abfrage muss nicht nett sein. Ich habe ~ 8000 Datensätze in jeder Liste und ich werde es schön laufen lassen. Gerne führe ich bei Bedarf kleinere Excel-Manipulationen durch.

Ich wollte einen vollständigen Join ausführen, aber im Fenster mit den Eigenschaften des Access-Abfrage-Designers für den Join kann ich ALL aus Tabelle A auswählen und aus Tabelle B abgleichen, ALL aus Tabelle B und Match aus Tabelle A oder nur diejenigen, die in beiden A übereinstimmen und B.

Ich bin mir sicher, dass dies sehr einfach ist, aber ich verwende MS Access sehr selten.

Bisher habe ich zwei Fragen, die mir nicht das geben, was ich will. Ich wollte sie in der vollständigen äußeren Verknüpfung kombinieren, da Access mir keine Option bietet, aber nicht sicher ist, wie:

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

und

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

Antworten:


10

Das letzte Mal, dass ich mit Access gespielt habe, war, als 2003 die heiße neue Sache war, daher ist dies möglicherweise nicht bis ins kleinste Detail genau. Sie müssen jedoch zum Abfrage-Designer gehen, die Ansicht in "SQL" (dh Rohtext-Eingabe) ändern und dann UNIONIhre beiden Links-Join-Abfragen zusammenfügen, z

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

Ich liebe es, dass die Antwort auf das eine Wort reduziert werden kann: "UNION", genau das, was ich wollte :)
Ozzah

1
Kein Problem. Es wäre schön, wenn Access vollständige äußere Verknüpfungen unterstützen würde, aber es wäre auch schön, wenn ich auch ein Pony hätte. (PS: Fragen Sie nicht einmal, wie Cross-Joins in Access ausgeführt werden sollen, es ist mäßig schrecklich.)
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

Haben Sie versucht, die Abfrage im SQL-Modus zu entwerfen, anstatt die Designeransicht zu verwenden?

Wenn Sie Access 2003 / XP / 2000/97 verwenden, sehen Sie sich dies an: http://www.techonthenet.com/access/queries/view_sql.php

Wenn Sie Access 2007/2010 verwenden, können Sie dies tun, indem Sie auf den Pfeil auf der Schaltfläche Ansicht links neben der Multifunktionsleiste klicken. Klicken Sie dann auf SQL-Ansicht.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.