MS Accessの完全外部結合


11

私には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;

回答:


10

最後にAccessで遊んだのは2003年が新しいものだったので、細部まで完全に正確ではないかもしれません。ただし、必要なことは、クエリデザイナに移動し、ビューを "SQL"(つまり、未加工のテキストエントリ)に変更してからUNION、2つの左結合クエリを一緒にしたい場合です。

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」という1つの単語に減らすことができるのが気に入っています。これはまさに私が欲しかったものです:)
Ozzah

1
問題ない。Accessが完全な外部結合をサポートしていればいいのですが、私もポニーがいたらいいのですが。(追伸: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.