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의 직원 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;

답변:


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

나는 대답이 한 단어로 줄어든 것을 좋아합니다. "UNION", 정확히 내가 원하는 것입니다 :)
Ozzah

1
문제 없어요. Access가 전체 외부 조인을 지원하면 좋을 것이지만 조랑말도 있으면 좋을 것입니다. (PS : 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.