2012-01-16 19 views
8

मैं दो प्रश्न करता हूं और अजीब परिणाम प्राप्त करता हूं। मैं जानना चाहता हूं कि यह क्यों हो रहा है।
अब प्रश्नों:विरोधाभासी ओरेकल क्वेरी परिणाम

SELECT * FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c 
    AND a.a = 123; 

परिणाम खाली है।

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c 
    AND a.a = 123; 

परिणाम है 1.

यह वास्तव में अलग दिए गए मान के साथ एक ही क्वेरी है।
तालिका ए में 'ए' फ़ील्ड = 123 के साथ पंक्ति है।
तालिका बी में पंक्तियों को a.a = b.a. के रूप में शामिल नहीं किया गया है।

एक ही प्रश्न के लिए कुछ भी या 1 वापस नहीं किया जा सकता है?


अद्यतन:

जब मैं इसे इस तरह

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c (+) 
    AND a.a = 123; 

यह ठीक काम करता है।

+16

ANSI-92 वाक्यविन्यास ('बाएं जॉइन', आदि का उपयोग करके अपनी क्वेरी को दोबारा सुधारें, और फिर इसे आज़माएं। यह 20 साल का है, मुझे लगता है कि इसमें सोने का समय है! – MatBailie

+1

'TABLE_C' के बारे में क्या? इसमें क्या है? – gdoron

+2

@Dems। अरे, मेरी इच्छा है कि मैं कभी-कभी एक से अधिक बार +1 कर सकता हूं ... –

उत्तर

1

संभवतः आपके पास सूचकांक या विदेशी कुंजी बाधाएं हैं जो तालिका डेटा के अनुरूप नहीं हैं। चूंकि ये दो प्रश्न अधिकतर सूचकांक का उपयोग करते हैं, वे असंगत डेटा लौटते हैं।

क्या आपने अस्थायी रूप से संस्कारों को अक्षम कर दिया है, या यह सत्यापित किए बिना उन्हें सेट अप किया है कि वे प्रारंभ में वैध हैं (ENABLE NOVALIDATE)?

इंडेक्स का पुनर्निर्माण करने और विदेशी कुंजी बाधाओं को फिर से बनाने का प्रयास करें ताकि यह देखने के लिए कि आपकी समस्या ठीक हो गई है या नहीं।

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