मान लीजिए मेरे पास दो टेबल, टी 1 और टी 2 हैं जो लेआउट में समान हैं लेकिन इसमें अलग-अलग डेटा हो सकते हैं।ऑरैकल diff: दो तालिकाओं की तुलना कैसे करें?
इन दो तालिकाओं को अलग करने का सबसे अच्छा तरीका क्या है?
मान लीजिए मेरे पास दो टेबल, टी 1 और टी 2 हैं जो लेआउट में समान हैं लेकिन इसमें अलग-अलग डेटा हो सकते हैं।ऑरैकल diff: दो तालिकाओं की तुलना कैसे करें?
इन दो तालिकाओं को अलग करने का सबसे अच्छा तरीका क्या है?
आप सेट संचालन आज़मा सकते हैं: MINUS
और INTERSECT
अधिक जानकारी के लिए यहाँ देखें: http://oreilly.com/catalog/mastorasql/chapter/ch07.html
इस तरह के प्रश्न के लिए मुझे लगता है कि आपको जो कुछ खोज रहे हैं उसके बारे में आपको बहुत विशिष्ट होना चाहिए, क्योंकि इसे समझने के कई तरीके हैं और कई अलग-अलग दृष्टिकोण हैं। यदि आपका प्रश्न वारंट नहीं करता है तो कुछ दृष्टिकोण एक हथौड़ा होने जा रहे हैं।
सबसे सरल स्तर पर, "क्या टेबल डेटा बिल्कुल वही है या नहीं?", जिसे आप किसी भी जटिल पर जाने से पहले सरल गणना तुलना के साथ उत्तर देने का प्रयास कर सकते हैं।
पैमाने के दूसरे छोर पर "मुझे प्रत्येक तालिका से पंक्तियां दिखाएं जिसके लिए अन्य तालिका में समतुल्य पंक्ति नहीं है" या "मुझे दिखाएं कि पंक्तियों में समान पहचान कुंजी है लेकिन अलग-अलग डेटा मान हैं" ।
यदि आप वास्तव में तालिका ए के साथ तालिका ए को सिंक करना चाहते हैं तो यह एक MERGE कमांड का उपयोग करके अपेक्षाकृत सरल हो सकता है।
"मेर्ज" कमांड मेरे लिए नया था। यह वास्तव में कई परिस्थितियों के लिए चाल है। – thrag
यदि आपके पास खर्च करने के लिए कुछ पैसा है, तो ओरेकल के लिए PowerDIFF टूल का उपयोग करें: http://www.orbit-db.com। यह कई तुलना विकल्पों के साथ आता है और इन प्रकार की नौकरियों को उत्कृष्टता से करता है।
इस प्रयास करें:
(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
के साथ कोई प्रदर्शन समस्या नहीं है।
आप dbForge Data Compare for Oracle, डेटा तुलना और तुल्यकालन के लिए एक ** मुक्त GUI उपकरण है, कि सभी डेटाबेस या आंशिक रूप से खत्म हो गया है कि इन कार्रवाइयों कर सकते हैं की कोशिश कर सकते हैं।
फास्ट समाधान:
SELECT * FROM TABLE1
MINUS
SELECT * FROM TABLE2
कोई रिकॉर्ड नहीं दिखाना चाहिए ...
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)
आशा इस मदद करता है
प्रयास करें:
select distinct T1.id
from TABLE1 T1
where not exists (select distinct T2.id
from TABLE2 T2
where T2.id = T1.id)
एसक्यूएल ओरेकल 11g के साथ +
उन पर निहित अलग हालांकि प्रदर्शन के लिए हानिकर होगा। –