2011-09-30 23 views
6

Mümkün olan her çözümü çevrimiçi olarak okudum ve her seferinde farklı bir sonuç elde ediyorum.Yinelenen öğeler kaldırılırken Access'te iki tablo nasıl birleştirilir?

İki tablom var: İstemciler ve Kullanıcılar. Her ikisi de aynı yapıya sahiptir: LastName, FirstName, Adres, Şehir, Eyalet ve Zip. Müşterilerin sadece 42.000 girişi varken, Müşterilerin 108.000 girişi vardır. Ve bu girdilerden bazıları, 150.000 müşterim olmadığı için ikisi arasında kopyalandı.

Tek bir tutarlı listeye ihtiyacım var. Çalıştığım sorun, bazı müşterilerimin aynı adreste yer almasıdır. Bu nedenle, yasal bir müşteriyi kaldıracak olan yinelenen adresleri kaldıramıyorum. Ve çok yaygın isimleri olan bazı müşterilerim var, Jane Doe, birkaç adresin farklı adreslerde var olduğu için, son veya ilk isimleri kopyalayamıyorum. Ben Basitçe EVET benzersiz değerler dönüm Microsoft Access 2010

kullanıyorum

yardım etmiyor.

Microsoft yardım dosyalarını inceledim ve 2 ile 168.000 arasında sonuç elde ettim ve çoğu şey arasında.

Nasıl çoğaltmadan tek bir listeyi alfabetik hale getirmek ve satır başına 150.000 giriş satırına gitmek zorunda kalmadan alabilirim ??

+0

İşletmemizin kurma şekli, bazılarının müşterileri ve kullanıcıları, bazıları ise yalnızca biri veya diğeridir. – Lantiis

cevap

8

BIR UNION sorgusu yalnızca ayrı satırları döndürür. (Ayrıca BIR UNION ALL, ancak bu yinelenen satırlar içerecektir, bu yüzden burada istemezsiniz.)

Bu soruyu deneyin. İstediğinizi geri getirmezse, lütfen neden kısa düşerse açıklayın.

SELECT LastName, FirstName, Address, City, State, Zip 
FROM Clients 
UNION 
SELECT LastName, FirstName, Address, City, State, Zip 
FROM Patrons 
ORDER BY LastName, FirstName; 

ORDER BY alanında başka bir alan veya alan da isteyebilirsiniz. Sadece başlamak için bir şey teklif ettim.

+0

Bu aslında bana yaptığım sorguda bir sorgu kullanmam için aynı numarayı verdi. Bu yüzden çok mutluyum! Şimdi aynı sonucu üreten iki farklı yöntem var. Çok teşekkür ederim! – Lantiis

2

Bunu yapmanın bir yolu, FULL OUTER JOIN ve COALESCE değerlerini yapmaktır. Bu, istemci tablosunda, patron tablosunda veya her ikisi de

'un ne olduğunu bilmenizi sağlar. Ne yazık ki AFAIK Erişimi FULL OUTER'e sahip değil, bunun yerine bunu taklit etmeniz gerekir. olacak bir kod oluşturmak mümkün olmayacak: Eğer sadece bir liste gerekirse

SELECT a.LastName, a.FirstName, a.Address, a.City, a.State, a.Zip , "Both" as type 
FROM Clients a INNER JOIN Patrons b 
ON a.LastName = b.LastName 
    AND a.Address = b.Address 
    AND a.City = b.City 
    AND a.State = b.State 
    AND a.Zip = b.Zip 
UNION ALL 
SELECT a.LastName, a.FirstName, a.Address, a.City, a.State, a.Zip , "Client" as type 
FROM Clients a LEFT JOIN Patrons b 
ON a.LastName = b.LastName 
    AND a.Address = b.Address 
    AND a.City = b.City 
    AND a.State = b.State 
    AND a.Zip = b.Zip 
WHERE 
    b.PatronID is null (Or whatever the PK is) 
UNION ALL 
SELECT b.LastName, b.FirstName, b.Address, b.City, b.State, b.Zip , "Patron" as type 
FROM Clients a RIGHT JOIN Patrons b 
ON a.LastName = b.LastName 
    AND a.Address = b.Address 
    AND a.City = b.City 
    AND a.State = b.State 
    AND a.Zip = b.Zip 
WHERE 
    a.ClientID is null (Or whatever the PK is) 

sadece ben tam otomatik çözüm bina işin bedelinin olduğundan emin değilim HansUp yanıtını

+0

Keşke bunu düzeltmek için yeterince temsilcisi olsaydım. Sonunda bir listeye ihtiyaç duyduğum halde bununla oynamayı çok sevdim ^^ – Lantiis

0

kullanmalıdır olsa Aynı kişi olarak Doe, Jane, 1234 Sunset Boulevard ve Doe, Jane, 1234 Sunset Bd'u düşünün, ancak bunlar aynı kişi!

olsam, ben 4 adım yarı otomatik bir çözüm inşa ediyorum: Bir sorgu yoluyla,

  • Ekran eklemek bir 'isDuplicate' mantıksal bir alan bir benzersiz tabloda her iki tablo

    1. Birleştirme tüm benzer adları ve bir sorgusu, adresleri (mümkün olduğunca benzer şekilde) tüm benzer
    2. Ekran silinecek çiftleri atayabilecekti ve dupllicates atayabilecekti
    3. 'isDuplicate'
    4. true olarak ayarlanır tüm kayıtları sil silinecek

    Tabii ki, bu yöntem sadece yinelenen adlar \ adresleri sınırlı ise ilginç! Filtrelemenizin dikkate almanız gereken birkaç yüz kayıt olacağını düşünüyorum. Ne kadar sürer? bir saat mi iki mi? Bence işe değer! Bu süreci otomatik hale getirerek, tüm kopyaların elimine edilmesini asla sağlayamayacaksınız, hiçbir meşru müşterinin silinmediğinden emin olamayacaksınız. İşi bu şekilde yaparak sonucundan emin olacaksın.

  • 0

    Bunu yapmak için daha iyi bir yol arıyorum, ama burada cevabın "zor" olduğunu görünce şaşırdım. Otomatik olarak birleştirmek için basit bir yol olmadığı için, Access yerel işlevlerini kullanarak kolay bir yol var.

    "Unmatch" Sorgusu oluşturmak için Sorgu sihirbazını kullanın. Bu, bir masada bulunan ancak her iki tabloda olmayan bir sihirbaz listesi oluşturur (sihirbaz sırasında belirttiğiniz belirtirsiniz). Sonra bu kayıtları ekleyebilir veya istediğiniz gibi yeni bir tablo oluşturabilirsiniz.

    Bu adımda kayıt verilerini karıştırmanın bir yolu bilmiyorum, çünkü bu çok daha karmaşık.

    +0

    Stackoverflow'a hoş geldiniz! Bu soruya bir cevap değildir, yeni bir soru sormak ve bunun yerine buna başvurmak ister misiniz? – MCollard

    İlgili konular