2011-09-30 9 views
6

मैंने ऑनलाइन हर संभव समाधान के माध्यम से पढ़ा है, और मुझे हर बार एक अलग परिणाम मिलता है।डुप्लिकेट को हटाते समय मैं एक्सेस में दो तालिकाओं को कैसे विलय करूं?

मेरे पास दो टेबल हैं: ग्राहक और संरक्षक। दोनों के पास एक ही संरचना है: अंतिम नाम, फर्स्टनाम, पता, शहर, राज्य, और ज़िप। ग्राहकों की 108,000 प्रविष्टियां हैं जबकि संरक्षकों में केवल 42,000 प्रविष्टियां हैं। और उनमें से कुछ प्रविष्टियों को दो के बीच डुप्लिकेट किया गया है क्योंकि मेरे पास 150,000 ग्राहक नहीं हैं।

मुझे एक सुसंगत सूची की आवश्यकता है। जिस समस्या में मैं चल रहा हूं वह यह है कि मेरे कुछ ग्राहक एक ही पते पर रहते हैं, इसलिए मैं केवल डुप्लिकेट पते को हटा नहीं सकता क्योंकि यह एक वैध ग्राहक को हटा देगा। और मेरे पास बहुत आम नाम वाले कुछ ग्राहक हैं, जेन डो कहते हैं, जहां उनमें से कुछ अलग-अलग पते पर हैं, इसलिए मैं केवल अंतिम या पहले नामों को डुप्लिकेट नहीं कर सकता।

मैं माइक्रोसॉफ्ट एक्सेस 2010

उपयोग कर रहा हूँ, बस हां में अनन्य मानों मोड़ मदद नहीं कर रहा है।

मैं Microsoft मदद फ़ाइलों में घूमते है, और मैं के बीच में सबसे अधिक 168,000 करने के लिए 2 के परिणाम मिल गया है और सब कुछ है।

मैं इसे alphabetize और 150,000 प्रविष्टियों के लिए लाइन द्वारा लाइन पर जाए बिना डुप्लिकेट के बिना एक सूची कैसे प्राप्त कर सकते हैं ??

+0

जिस तरह से हमारा व्यवसाय स्थापित होता है, कुछ ग्राहक और संरक्षक होते हैं जबकि अधिकांश अन्य केवल एक या दूसरे होते हैं। – Lantiis

उत्तर

8

एक यूनियन क्वेरी केवल अलग पंक्तियों को लौटाती है। (इसके अलावा कई यूनिअन सभी है, लेकिन उस डुप्लिकेट पंक्तियों को शामिल किया जाएगा, ताकि आप इसे यहाँ नहीं देना चाहते।)

इस क्वेरी का प्रयास करें। यदि आप जो चाहते हैं उसे वापस नहीं लौटाते हैं, तो कृपया बताएं कि क्यों छोटा हो जाता है।

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 में एक और फ़ील्ड या फ़ील्ड चाहते हैं। मैंने बस कुछ शुरू करने की पेशकश की।

+0

यह वास्तव में मुझे वही संख्या देता है जो मैंने क्वेरी-ऑन-क्वेरी का उपयोग करके किया था। तो मैं बहुत खुश हूँ! मेरे पास दो अलग-अलग विधियां हैं जो अब एक ही परिणाम उत्पन्न करती हैं। आपका बहुत बहुत धन्यवाद! – Lantiis

2

ऐसा करने का एक तरीका है एक पूर्ण बाहरी जॉइन और मूल्यों को मापना। यह आपको क्लाइंट टेबल, संरक्षक तालिका या

दुर्भाग्यवश AFAIK एक्सेस में पूर्ण आउटपुट नहीं है, इसलिए आपको इसकी अनुकरण करने की आवश्यकता होगी।

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) 

तुम सिर्फ एक सूची की जरूरत है, हालांकि तुम सिर्फ HansUp के जवाब

+0

मेरी इच्छा है कि मेरे पास इसे टक्कर देने के लिए पर्याप्त प्रतिनिधि था। मुझे इसके साथ खेलना अच्छा लगा, हालांकि अंत में मुझे सिर्फ एक सूची की आवश्यकता थी ^^ – Lantiis

0

का उपयोग करना चाहिए मुझे यकीन है कि एक पूरी तरह से स्वचालित समाधान के निर्माण के काम के लायक है नहीं कर रहा हूँ: तुम कभी नहीं एक कोड है कि होगा निर्माण करने के लिए सक्षम हो जाएगा एक ही व्यक्ति के रूप में Doe, Jane, 1234 Sunset Boulevard और Doe, Jane, 1234 Sunset Bd पर विचार करें, हालांकि ये वास्तव में एक ही व्यक्ति हैं!

अगर मैं तुम्हें थे, मैं एक 4 कदम अर्द्ध स्वचालित समाधान का निर्माण चाहते हैं:

  1. मर्ज एक अद्वितीय तालिका में दोनों टेबल, एक 'isDuplicate' बूलियन क्षेत्र
  2. प्रदर्शन, एक प्रश्न के माध्यम से जोड़ने , सभी इसी तरह के नाम, और डुप्लिकेट हटाए जाने के लिए
  3. प्रदर्शन पते (संभव के रूप में समान रूप में) सभी समान को चुनने में, एक प्रश्न के माध्यम से, और dupllicates चुनने में
  4. सभी रिकॉर्ड जहां 'isDuplicate' ट्रू
  5. पर सेट है हटाएँ हटाए जाने के लिए

बेशक, यह विधि तभी दिलचस्प है जब डुप्लिकेट नाम \ पते सीमित हैं! मुझे लगता है कि आपके फ़िल्टरिंग आपको विचार करने के लिए कुछ सौ रिकॉर्ड देंगे। कितनी देर लगेगी? एक घंटे या दो? मुझे लगता है कि यह नौकरी के लायक है! इस प्रक्रिया को स्वचालित करके आप यह सुनिश्चित करने में सक्षम नहीं होंगे कि सभी डुप्लीकेट समाप्त हो जाएंगे, न ही आप सुनिश्चित होंगे कि कोई वैध क्लाइंट हटा नहीं गया है। इस तरह से नौकरी करके, आप अपने परिणाम के बारे में सुनिश्चित होंगे।

0

मैं इसे करने के लिए एक बेहतर तरीका ढूंढ रहा हूं, लेकिन मुझे आश्चर्य हुआ कि यहां का जवाब "कठिन" है। स्वचालित रूप से शामिल होने के लिए कोई आसान तरीका नहीं दिया गया है, एक्सेस मूल कार्यों का उपयोग करके एक आसान तरीका है।

"अनमच" क्वेरी बनाने के लिए क्वेरी विज़ार्ड का उपयोग करें। यह उन प्रतिभागियों की एक सूची तैयार करेगा जो एक पर मौजूद हैं, लेकिन दोनों टेबल नहीं (आप निर्दिष्ट करते हैं कि विज़ार्ड के दौरान)। फिर आप उन रिकॉर्ड्स को जोड़ सकते हैं या कृपया एक नई टेबल बना सकते हैं।

मुझे इस चरण में रिकॉर्ड डेटा को मिश्रित करने का कोई तरीका नहीं पता है क्योंकि यह बहुत जटिल है।

+0

स्टैक ओवरफ्लो में आपका स्वागत है! यह प्रश्न का उत्तर नहीं है, क्या आप एक नया प्रश्न बनाना चाहते हैं और इसके बजाय इसका संदर्भ लें। – MCollard

संबंधित मुद्दे