web-dev-qa-db-ja.com

MS Accessでの完全外部結合

私には2つのスタッフリストがあります。

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が1つの繰り返しのないリストにマージされ、2つのリスト間で一致しない可能性がある2つの監督者の詳細がマージされていることに注意してください。

クエリはニースである必要はありません。各リストに〜8000レコードがあり、それを実行します。その後、必要に応じてExcelのマイナーな操作を行ってよかったです。

完全結合を実行したかったのですが、結合のAccessクエリデザイナのプロパティウィンドウでは、テーブルAからALLとテーブルBからのマッチング、テーブルBからのALLとテーブルAからのマッチング、または両方に一致するもののみを選択できます。およびB.

これは非常に簡単に実行できると確信していますが、MS Accessを使用することはほとんどありません。

これまでに2つのクエリがあり、必要なクエリが得られません。 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」(つまり、未加工のテキストエントリ)に変更してから、2つの左結合クエリを一緒に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