2010-11-24 18 views
8

क्या पहली पूछताछ का आदेश देना संभव है और पंक्तियों को पहले के रूप में वापस रखें और दूसरी पूछताछ का आदेश न दें। (है कि बनाता है भावना)MYSQL यूनियन ऑर्डरिंग

मेरे वर्तमान जांच का एक उदाहरण है:

SELECT 
    * 
FROM 
    Devices 
WHERE 
    Live = 'true' 
    AND Category = 'apple' 
ORDER BY 
    ListOrder 
UNION 
SELECT 
     * 
    FROM 
     Devices 
    WHERE 
     DeviceLive = 'true' 

मुझे उम्मीद थी कि श्रेणी सेब के तहत उपकरणों वहाँ सूची क्रम में व्यवस्थित किया जाएगा और के शीर्ष पर होगा अन्य उपकरणों के ऊपर सूची। लेकिन ऐसा लगता है कि दोनों प्रश्न एक साथ मिलते हैं।

उत्तर

15

आपको कृत्रिम सॉर्ट कुंजी पेश करने की आवश्यकता होगी। कुछ की तरह:

SELECT 
    *, 1 as SortKey 
FROM 
    Devices 
WHERE 
    Live = 'true' 
    AND Category = 'apple' 
UNION 
SELECT 
     *, 2 as SortKey 
    FROM 
     Devices 
    WHERE 
     DeviceLive = 'true' 
ORDER BY SortKey, ListOrder 
+0

यह मैं कैसे, अतीत – Sonny

+0

इलाज की तरह काम किया में यह कार्य किया है उसे धन्यवाद जो है! – Yardstermister

+0

नमस्ते, मुझे कृत्रिम सॉर्ट कुंजी बनाने की आवश्यकता नहीं थी, मैंने अभी सुनिश्चित किया था कि प्रत्येक तालिका में दोनों कॉलम का वही नाम था जिसे मैं सॉर्ट करना चाहता था। मेरे मामले में, कॉलम का नाम "ऑर्डर" था। तो मैंने किया: चयन करें *, तालिका 1 से यूओडर के रूप में ऑर्डर करें, यूनियन का चयन करें *, ऑर्डर के रूप में आदेश 2 ऑर्डर द्वारा ऑर्डर –

2

आप कर सकते थे नकली यह

SELECT col1, col2 ... 
FROM (
    SELECT 1 fake_order, col1, col2 ... FROM Devices WHERE Live ='true' AND Category='apple' ORDER BY ListOrder 
    UNION ALL 
    SELECT 2, col1, col2 ... FROM Devices WHERE DeviceLive ='true' 
) AS T 
ORDER BY fake_order 

(मेरे सिर के ऊपर से Untested एसक्यूएल)

+0

मुझे पता है कि यह पुराना है, लेकिन पूरा होने के लिए (और मुझे लगता है कि आप कहते हैं कि यह अनचाहे है), आप काम करने के लिए इसके लिए आंतरिक क्वेरी का नाम देना होगा। –

+0

@TomHeard - धन्यवाद, मैंने क्वेरी – Tony

+0

को अपडेट किया है 'AS' ड्रॉप करें और आप अच्छे हैं। –

2

UNION एक अंतर्निहित डी-डुप्लीकेशन समारोह है। इसका मतलब यह है कि इसका उपयोग करने का दुष्प्रभाव यह है कि इसके साथ सबकुछ जुड़ा हुआ है क्योंकि इसके होने के लिए इसका हल किया गया है। यह भी (आमतौर पर, लेकिन हमेशा नहीं) का मतलब है कि आप सॉर्ट आउटपुट प्राप्त करते हैं (अगला पैराग्राफ देखें)।

UNION ALL इस निकालता है, लेकिन, अभी भी चेतावनी है कि एक स्पष्ट order by बिना एक प्रश्न से उत्पादन का कोई गारंटीयुक्त आदेश है है। यह एक और जवाब से ढका हुआ है, लेकिन मैंने सोचा कि यह क्यों मायने रखता है यह महत्वपूर्ण है।

+0

धन्यवाद, मैं एक कारण ढूंढ रहा था कि मेरी निष्पादन योजना एक तरह क्यों कर रही थी। यह इसका जवाब देता है और मेरी अजीब ऑर्डरिंग समस्या है। –

0

मैं जो Stefanelli से मेरा उत्तर मिल गया है, लेकिन यह थोड़ा संशोधित:

हाय, मैं एक कृत्रिम तरह कुंजी बनाने की जरूरत नहीं किया, मैं सिर्फ इतना है कि हर तालिका दोनों का एक ही नाम था सुनिश्चित किया कॉलम मैं सॉर्ट करना चाहता था। मेरे मामले में, कॉलम का नाम "ऑर्डर" था। तो मैंने किया:

Select *, order as uOrder from table 1 
UNION 
select *, order as uOrder from table 2 
ORDER BY uOrder 
संबंधित मुद्दे