MS Access'te Tam Dış Birleştirme


11

İki personel listem var:

List A:

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

ve

List B:

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

Ve şu çıktıya ihtiyacım var:

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

Liste A ve Liste B'deki personel kimliklerinin tek, tekrar etmeyen bir liste halinde birleştirildiğine ve iki liste arasında eşleşmeyebilecek iki yönetici ayrıntısını birleştirdiğime dikkat edin.

Sorgu güzel olmak zorunda değil. Her listede ~ 8000 kayıt var ve güzel çalışacağım. Gerekirse daha sonra bazı küçük Excel manipülasyonları yapmaktan mutluluk duyuyorum.

Tam bir birleştirme yapmak istedim, ancak birleştirme üzerindeki Access sorgu tasarımcısı özellikleri penceresi, tablo A'dan TÜM'ü seçip tablo B'den, tablo B'den TÜMÜ ve tablo A'dan eşleştirme veya yalnızca A ve B.

Eminim bunu yapmak çok basit, ama çok nadiren MS Access kullanıyorum.

Şimdiye kadar bana istediğim şeyi vermeyen iki sorgum var. Access bana bir seçenek sunmayacağından, ancak nasıl yapılacağından emin olmadığından, onları tam dış birleşimde birleştirmek istedim:

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

ve

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

Yanıtlar:


10

Access'le en son oynadığım 2003'ün en yeni şey olduğu zamandı, bu yüzden bu her ayrıntı için tamamen doğru olmayabilir. Ancak, yapmanız gereken sorgu tasarımcısına gitmek, görünümü "SQL" (yani ham metin girişi) olarak değiştirmek ve sonra UNIONiki sol birleşim sorgunuzu birlikte ör.

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

Cevabın tek kelimeye indirgenebileceğini seviyorum: "
Sendika

1
Sorun değil. Access'in tam dış birleşimleri desteklemesi güzel olurdu, ama aynı zamanda midilli olsaydı da iyi olurdu. (PS: Access'te çapraz
eklemelerin

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

Sorguyu tasarımcı görünümünü kullanmak yerine SQL modunda tasarlamayı denediniz mi?

Access 2003 / XP / 2000/97 kullanıyorsanız şu adrese bir göz atın: http://www.techonthenet.com/access/queries/view_sql.php

Access 2007/2010 kullanıyorsanız, şeridin sol tarafındaki Görünüm düğmesindeki oku tıklatarak bunu yapabilirsiniz. Ardından SQL Görünümü'ne tıklayın.


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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.