Full Outer Bergabung di MS Access


11

Saya punya dua daftar staf:

List A:

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

dan

List B:

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

Dan saya perlu output berikut:

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

Perhatikan bahwa ID staf dari Daftar A dan Daftar B telah digabung ke dalam satu daftar, yang tidak berulang, dan bahwa saya telah menggabungkan dua detail pengawas yang mungkin tidak cocok antara kedua daftar.

Permintaan tidak harus menyenangkan. Saya memiliki ~ 8000 catatan di setiap daftar dan saya akan menjalankannya dengan baik. Saya senang melakukan beberapa manipulasi kecil Excel setelahnya jika perlu.

Saya ingin melakukan penggabungan penuh, tetapi jendela properti desainer kueri Access pada gabung memungkinkan saya untuk memilih SEMUA dari tabel A dan mencocokkan dari tabel B, SEMUA dari tabel B dan mencocokkan dari tabel A, atau hanya yang cocok dengan kedua A dan B.

Saya yakin ini sangat sederhana untuk dilakukan, tetapi saya sangat jarang menggunakan MS Access.

Saya memiliki dua pertanyaan sejauh ini yang tidak memberikan apa yang saya inginkan. Saya ingin menggabungkan mereka dalam gabungan luar sepenuhnya, karena Access tidak akan memberi saya opsi, tetapi tidak yakin bagaimana:

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

dan

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

Jawaban:


10

Terakhir kali saya bermain dengan Access adalah ketika 2003 adalah hal baru yang panas, jadi ini mungkin tidak sepenuhnya akurat untuk setiap detail. Namun, apa yang perlu Anda lakukan adalah pergi ke desainer kueri, mengubah tampilan menjadi "SQL" (yaitu entri teks mentah) dan kemudian Anda ingin UNIONdua kueri gabung-kiri Anda bersama-sama, misalnya

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

Saya suka bahwa jawabannya dapat dikurangi menjadi satu kata: "UNION", yang persis seperti yang saya inginkan :)
Ozzah

1
Tidak masalah. Akan lebih baik jika Access mendukung gabungan luar penuh, tetapi juga akan menyenangkan jika saya memiliki kuda poni juga. (PS: Bahkan tidak bertanya bagaimana melakukan cross joins di Access, itu cukup buruk.)
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

Sudahkah Anda mencoba mendesain kueri dalam mode SQL alih-alih menggunakan tampilan desainer?

Jika Anda menggunakan Access 2003 / XP / 2000/97 maka lihat ini: http://www.techonthenet.com/access/queries/view_sql.php

Jika Anda menggunakan Access 2007/2010, Anda dapat melakukan ini dengan mengeklik panah pada tombol Lihat di sebelah kiri pita. Kemudian klik SQL View.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.