2009-03-04 12 views
19

मैं कैसे सुनिश्चित कर सकता हूं कि मेरे परिणाम सेट में a पहले और b सेकेंड होगा? यह मुझे एक मुश्किल आदेश समस्या हल करने में मदद करेगा। कोई गारंटी नहीं है जिसके द्वारा एक आदेश के बिना पहले बाहर आ जाएगा कोई रास्ता नहीं हैमैं बिना किसी आदेश के यूनियन में प्रविष्टियों को कैसे ऑर्डर कर सकता हूं?

SELECT a FROM A LIMIT 1 
UNION 
SELECT b FROM B LIMIT 1; 
+1

@tharkun: मुझे एहसास है कि आपको रिचबी पसंद नहीं है, लेकिन एहसास है कि आपका प्रश्न मुख्य पृष्ठ पर कैसा दिखता है यदि आप केवल दो पंक्तियां देखते हैं तो SQL कोड हैं, न कि सवाल। यही कारण है कि उन्होंने इसे जिस तरह से संपादित किया, और स्पष्ट रूप से, उनके संपादन ने सवाल को बेहतर बना दिया। –

+0

@tharkun: अपने संपादन से अपने 'कठोर' स्वर को अलग करें। वे अलग हैं। वह निश्चित रूप से अपनी भाषा में फंस गया है; लेकिन इससे उनके संपादन कम मान्य नहीं होते हैं। –

+0

रिच के संपादन में वापस घुमाया। प्रश्न की गुणवत्ता के अलावा किसी के साथ या किसी अन्य चीज़ के साथ साइडिंग नहीं। –

उत्तर

34
SELECT col 
FROM 
    (
     SELECT a col, 0 ordinal FROM A LIMIT 1 
     UNION ALL 
     SELECT b, 1 FROM B LIMIT 1 
    ) t 
ORDER BY ordinal 
+0

कि क्या दाना पता चलता है की समर्थक + संस्करण प्रतीत हो रहा है, धन्यवाद! – markus

+0

यह है कि, यदि मैं परिणाम सेट में ordinal नहीं चाहता, है ना? – markus

+0

और लाइन 7 में अकेला 'टी' क्या कर रहा है? – markus

1

ओरेकल के लिए मुझे पता है:

यहाँ मैं क्या कर रहा हूं की एक सरल उदाहरण है। समस्या यह है कि यदि आप इसे आजमाते हैं तो यह सही क्रम में भी आ सकता है, यहां तक ​​कि जितनी बार आप इसे चलाते हैं। लेकिन जैसे ही आप इसे उत्पादन में भरोसा करते हैं, यह गलत हो जाएगा।

2

नहीं, SQL क्वेरी में परिणामों का क्रम नियंत्रित किया गया है ORDER BY खंड द्वारा केवल नियंत्रित किया गया है। ऐसा हो सकता है कि आप कुछ परिस्थितियों में किसी ऑर्डर द्वारा आदेश के बिना आदेशित परिणाम देख सकें, लेकिन यह मौका है (उदाहरण के लिए ऑप्टिमाइज़र की वर्तमान क्वेरी योजना का दुष्प्रभाव) और गारंटी नहीं है।

मुश्किल आदेश समस्या क्या है?

+0

धन्यवाद, मैंने सोचा ... मुश्किल आदेश समस्या, अगर यह मुश्किल रहती है तो यह एक और प्रश्न की सामग्री होगी जो मैं यहां लिंक करूंगा । – markus

20

मुझे नहीं लगता कि ऑर्डर की गारंटी है, कम से कम सभी डीबीएमएस में नहीं।

क्या मैं यूनियनों में आदेश को नियंत्रित करने के पूर्व में की गई है:

(SELECT a, 0 AS Foo FROM A LIMIT 1) 
UNION 
(SELECT b, 1 AS Foo FROM B LIMIT 1) 
ORDER BY Foo 
+0

ओह, यह शानदार, आसान और शानदार है! – markus

+0

क्या आप सुनिश्चित हैं कि आदेश केवल यूनियन में अंतिम प्रश्न पर लागू नहीं होगा? –

+0

@ केजेटिल: वास्तव में आप सही हैं, ब्रैकेट – markus

0

मैं नहीं सोचा होगा, के बाद से सबसे अधिक संभावना डेटाबेस यूनिअन करने के क्रम में एक ORDER BY करने के लिए की आवश्यकता होगी ।

यूनियन सभी अलग-अलग व्यवहार कर सकते हैं, लेकिन वाईएमएमवी।

+0

यूनियन सभी बस गारंटी देते हैं कि सभी रिकॉर्ड लौटाए गए हैं। एक साधारण यूनियन फ़िल्टर डुप्लिकेट करता है। – Dana

-6

संक्षिप्त उत्तर हाँ आप एक तो बी

+0

और क्या, लंबे समय से इस सवाल का जवाब है कि हर किसी को देखते हुए और विपरीत कहता है? – markus

+0

विस्तृत उत्तर यह होगा कि खंड एक ORDER BY बिना, आप यूनिअन खंड पर आधारित फीफो पाने के लिए जा रहे हैं। मिसाल के तौर पर, यूनियन में पहले निर्दिष्ट तालिका बी का उपयोग होगा, बी-> ए। यूनियन में किसी भी तरह का सॉर्टिंग व्यवहार शामिल नहीं है। – Bill

+0

पीपीएल आपके साथ सहमत नहीं लगता है, क्या आप अपना दावा साबित कर सकते हैं? – markus

4

आपका परिणाम UNION के साथ सेट विशिष्ट मानों समाप्त करेंगे मिल जाएगा है।

मुझे प्रलेखन में कोई सबूत नहीं मिल रहा है, लेकिन 10 वर्षों के अनुभव से मैं बता सकता हूं कि UNION ALL कम से कम Oracle में आदेश को संरक्षित करता है।

इस पर भरोसा न करें, हालांकि, यदि आप परमाणु संयंत्र या ऐसा कुछ बना रहे हैं।

+3

हां, मैं परमाणु ऊर्जा संयंत्र बना रहा हूं! ;) – markus

+0

यह काम करने लगता है। यह समझ में आता है कि यूनियन ऑर्डरिंग को गड़बड़ कर देगा अगर यह डुप्लिकेशंस की जांच कर रहा है, जबकि यूनियन सभी नहीं करेंगे – David

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

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