it-swarm-eu.dev

Plné vnější připojení v MS Access

Mám dva seznamy zaměstnanců:

List A:

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

a

List B:

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

A potřebuji následující výstup:

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

Všimněte si, že ID zaměstnanců ze seznamu A a seznamu B byly sloučeny do jediného, ​​neopakujícího se seznamu, a že jsem sloučil dva údaje vedoucího, které se nemusí shodovat mezi těmito dvěma seznamy.

Dotaz nemusí být pěkný. V každém seznamu mám ~ 8 000 záznamů a spustím je Nice. V případě potřeby jsem rád, že později udělám nějakou drobnou manipulaci s Excelem.

Chtěl jsem provést úplné připojení, ale v okně vlastností návrháře dotazů aplikace Access na spojení mi mohu vybrat VŠECHNY z tabulky A a odpovídající z tabulky B, ALL z tabulky B a odpovídající z tabulky A, nebo pouze ty, které se shodují v obou A a B.

Jsem si jist, že je to velmi jednoduché, ale velmi zřídka používám MS Access.

Zatím mám dva dotazy, které mi nedávají to, co chci. Chtěl jsem je zkombinovat do plného vnějšího spojení, protože mi Access nedá možnost, ale nejsem si jistý, jak:

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

a

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

Naposledy, co jsem hrál s Accessem, bylo, když byl rok 2003 žhavou novinkou, takže to nemusí být úplně přesné pro každý detail. Co však musíte udělat, je přejít na návrháře dotazů, změnit pohled na „SQL“ (tj. Vstup surového textu) a poté chcete UNION své dva levé spojovací dotazy dohromady, např.

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

Zkusili jste navrhnout dotaz v režimu SQL místo použití návrhářského zobrazení?

Pokud používáte aplikaci Access 2003/XP/2000/97, podívejte se na toto: http://www.techonthenet.com/access/queries/view_sql.php

Pokud používáte aplikaci Access 2007/2010, můžete to udělat kliknutím na šipku na tlačítku Zobrazit na levé straně pásu karet. Poté klikněte na SQL View.

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