2011-06-01 7 views
19

मेरा लक्ष्य दो अलग-अलग प्रश्नों को निष्पादित करना है और फिर उन्हें गठबंधन करना है।
मेरे कोड है:ऑर्डर द्वारा ऑर्डर और LIMIT

SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1 
UNION 
SELECT * FROM some tables WHERE ... 

मैं निम्नलिखित त्रुटि मिलती है:

#1221 - Incorrect usage of UNION and ORDER BY

यह महत्वपूर्ण है कि आदेश द्वारा केवल पहले प्रश्न के लिए है। मैं यह कार्य कैसे कर सकता हूं?

+1

इस [ट्यूटोरियल] (http पढ़ें। org/sql-union-mysql.aspx) – luca

उत्तर

24

आप इसका उपयोग कर सकते हैं कोष्ठक व्यक्तिगत प्रश्नों पर ORDER/LIMIT के उपयोग की अनुमति के लिए:

(SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0, 1) 
UNION 
(SELECT * FROM some tables WHERE ...) 
ORDER BY 1 /* optional -- applies to the UNIONed result */ 
LIMIT 0, 100 /* optional -- applies to the UNIONed result */ 
+2

वाक्यविन्यास त्रुटि ... आपको उपनाम (ब्रैकेट) से चुनने की आवश्यकता है – Bohemian

+0

कोई वाक्यविन्यास त्रुटि नहीं, मैंने अभी जांच की है! –

+0

हम्म - मैंने भी चेक किया और त्रुटि मिली। शायद मुझे अपने mysql को अपग्रेड करना होगा। माफ़ कीजिये! – Bohemian

8
SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x 
UNION ALL 
SELECT * FROM some tables WHERE ... 

नोट UNION ALL के उपयोग:

  • UNION परिणाम सेट और डीबी आदेश से डुप्लीकेट पंक्तियों को हटा सभी ऐसा करने से पहले पंक्तियों (ताकि पूरे परिणाम सेट क्रमबद्ध किया जाता है)
  • UNION ALL दोनों ऑर्डर और डुप्लीकेट्स को सुरक्षित रखता है
2

सिर्फ दौर कोष्ठक में सब कुछ डाल दिया: //www.mysqltutorial:

(SELECT * FROM table1 ORDER BY datetime ) 
UNION 
(SELECT * FROM table2 ORDER BY datetime DESC) 
+1

वाक्यविन्यास त्रुटि ... आपको उपनाम (ब्रैकेट) चयन से चुनने की आवश्यकता है – Bohemian

+0

[डॉक्स] (http://www.mysqltutorial.org/sql-union-mysql.aspx) आपने इसे कहां पढ़ा? – luca

+0

मैंने जांच की और त्रुटि मिली। शायद मुझे अपने mysql को अपग्रेड करना होगा। माफ़ कीजिये! – Bohemian

1
(SELECT user_id AS id FROM tbl_user) 
UNION 
(SELECT address_id AS id FROM tbl_address) 
ORDER BY id ASC LIMIT 10