2011-10-08 5 views
5

मैं ORDER BYMINUS क्वेरी का परिणाम चाहता हूं।MINUS का उपयोग कर क्वेरी में आप कैसे ऑर्डर करते हैं?

मेरा पहला प्रयास काम नहीं करता:

SELECT * 
FROM Table1 
MINUS 
SELECT * 
FROM table2 
WHERE table2.foo = 'bar' 
ORDER BY foo 

आप कैसे करते हैं?

ओप्स: मैं केवल ORDER BY foo के बजाय ORDER BY table2.foo कर रहा था। अब यह काम कर रहा है।

+0

वे दोनों एक ही टेबल हैं जो मुझे लगता है? तो आप शून्य का उपयोग क्यों करते हैं? – frail

+0

क्षमा करें, बुरा उदाहरण। मैंने इसे – ladookie

+0

बदल दिया है जो आप कर रहे हैं मूल रूप से एक महंगी ऑपरेशन है, पूर्ण टेबल स्कैन की आवश्यकता है। इसलिए यदि आप कुछ उदाहरण डेटा पोस्ट कर सकते हैं तो इसे शामिल होने के साथ हल किया जा सकता है। (डेटा के आधार पर) और क्या आपको सभी डेटा चाहिए? क्या आपके पास एक सीमा हो सकती है जो पूर्ण तालिका स्कैन से बचें – frail

उत्तर

8

हालांकि, अपने सवाल का जवाब देने के लिए, आप एक प्रश्न के साथ उपयोग कर सकते हैं:

with tmp_minus as (
    SELECT * 
    FROM Table1 
    MINUS 
    SELECT * 
    FROM table2 
    WHERE table2.foo = 'bar' 
) 
select * from tmp_minus 
ORDER BY foo 

तुम भी एक subselect करने के लिए सक्षम होना चाहिए:

select * from (
    SELECT * 
    FROM Table1 
    MINUS 
    SELECT * 
    FROM table2 
    WHERE table2.foo = 'bar' 
) tmp_minus 
ORDER BY foo 
1

तो माइनस यूनिअन द्वारा प्रतिस्थापित किया गया, आदेश द्वारा यूनियन के परिणाम पर लागू होगा। क्या आप वाकई मिनस के साथ क्या नहीं पाते हैं?

यह सीधे काम नहीं करता है, तो:

SELECT result.* 
    FROM (SELECT * 
      FROM Table1 
     MINUS 
     SELECT * 
      FROM table2 
     WHERE table2.foo = 'bar') AS result 
ORDER BY foo; 

हालांकि, मुझे लगता है कि यह आवश्यक होने की संभावना नहीं है।

1

आप कॉलम नाम के बजाय स्थिति का उपयोग कर सकते हैं। कि foo मानते हुए परिणामों में प्रथम स्तंभ है:

SELECT * 
FROM Table1 
MINUS 
SELECT * 
FROM table2 
WHERE table2.foo = 'bar' 
ORDER BY 1 

आप आम तौर पर परिणाम एक विशिष्ट स्तंभ क्रम पर निर्भर नहीं करना चाहते, तो मैं केवल सहारा क्वेरी के लिए यह प्रयोग करेंगे।

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