2009-03-27 13 views
22

मान लीजिए मेरे पास दो टेबल, टी 1 और टी 2 हैं जो लेआउट में समान हैं लेकिन इसमें अलग-अलग डेटा हो सकते हैं।ऑरैकल diff: दो तालिकाओं की तुलना कैसे करें?

इन दो तालिकाओं को अलग करने का सबसे अच्छा तरीका क्या है?

उत्तर

4

आप तालिकाओं के बीच डिफ बनाने के लिए AQT जैसे किसी उपकरण का उपयोग कर सकते हैं।

एक और तरीका टेबल को एक फ़ाइल फ़ाइल में डंप करना होगा और WinMerge जैसे एक diff टूल का उपयोग करना होगा। इस दृष्टिकोण के साथ, आप टेबल को उसी लेआउट में बदलने के लिए जटिल एसक्यूएल का उपयोग कर सकते हैं।

13

आप सेट संचालन आज़मा सकते हैं: MINUS और INTERSECT

अधिक जानकारी के लिए यहाँ देखें: http://oreilly.com/catalog/mastorasql/chapter/ch07.html

+0

उन पर निहित अलग हालांकि प्रदर्शन के लिए हानिकर होगा। –

1

इस तरह के प्रश्न के लिए मुझे लगता है कि आपको जो कुछ खोज रहे हैं उसके बारे में आपको बहुत विशिष्ट होना चाहिए, क्योंकि इसे समझने के कई तरीके हैं और कई अलग-अलग दृष्टिकोण हैं। यदि आपका प्रश्न वारंट नहीं करता है तो कुछ दृष्टिकोण एक हथौड़ा होने जा रहे हैं।

सबसे सरल स्तर पर, "क्या टेबल डेटा बिल्कुल वही है या नहीं?", जिसे आप किसी भी जटिल पर जाने से पहले सरल गणना तुलना के साथ उत्तर देने का प्रयास कर सकते हैं।

पैमाने के दूसरे छोर पर "मुझे प्रत्येक तालिका से पंक्तियां दिखाएं जिसके लिए अन्य तालिका में समतुल्य पंक्ति नहीं है" या "मुझे दिखाएं कि पंक्तियों में समान पहचान कुंजी है लेकिन अलग-अलग डेटा मान हैं" ।

यदि आप वास्तव में तालिका ए के साथ तालिका ए को सिंक करना चाहते हैं तो यह एक MERGE कमांड का उपयोग करके अपेक्षाकृत सरल हो सकता है।

+0

"मेर्ज" कमांड मेरे लिए नया था। यह वास्तव में कई परिस्थितियों के लिए चाल है। – thrag

1

यदि आपके पास खर्च करने के लिए कुछ पैसा है, तो ओरेकल के लिए PowerDIFF टूल का उपयोग करें: http://www.orbit-db.com। यह कई तुलना विकल्पों के साथ आता है और इन प्रकार की नौकरियों को उत्कृष्टता से करता है।

38

इस प्रयास करें:

(select * from T1 minus select * from T2) -- all rows that are in T1 but not in T2 
union all 
(select * from T2 minus select * from T1) -- all rows that are in T2 but not in T1 
; 

कोई बाहरी उपकरण। union all के साथ कोई प्रदर्शन समस्या नहीं है।

3

आप dbForge Data Compare for Oracle, डेटा तुलना और तुल्यकालन के लिए एक ** मुक्त GUI उपकरण है, कि सभी डेटाबेस या आंशिक रूप से खत्म हो गया है कि इन कार्रवाइयों कर सकते हैं की कोशिश कर सकते हैं।

alt text

1

फास्ट समाधान:

SELECT * FROM TABLE1 
MINUS 
SELECT * FROM TABLE2 

कोई रिकॉर्ड नहीं दिखाना चाहिए ...

0

select * from table1 where table1.col1 in (select table2.col1 from table2)

मान लिया जाये कि col1 प्राथमिक कुंजी स्तंभ है और इस table1 में सभी पंक्तियों को दे देंगे table2 कॉलम 1 के संबंध में।

select * from table1 where table1.col1 not in (select table2.col1 from table2)

आशा इस मदद करता है

0

प्रयास करें:

select distinct T1.id 
    from TABLE1 T1 
where not exists (select distinct T2.id 
        from TABLE2 T2 
        where T2.id = T1.id) 

एसक्यूएल ओरेकल 11g के साथ +

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