मेरे पास SELECT UNION (SELECT...) के साथ SQL SELECT है

SELECT virtuemart_product_id 
FROM #__virtuemart_products 
WHERE product_special = 1
UNION
(SELECT virtuemart_product_id
 FROM #__virtuemart_product_badges
 WHERE badge = 3)

यह चयन पुण्यमार्ट_प्रोडक्ट_आईडी लौटाता है: 12345,54321,...,789,987 - उदाहरण के लिए अंतिम आईडी UNION (#__virtuemart_product_badges) तालिकाओं से है।

मुझे परिणामों को क्रमबद्ध करने की आवश्यकता है ताकि UNION तालिका से आईडी पहले (union_select_virtuemart_product_id और first_select_virtuemart_product_id के बाद) हों। अगर मैं यह कोशिश करता हूं:

...
UNION
    (SELECT virtuemart_product_id
     FROM #__virtuemart_product_badges AS badge
     WHERE badge = 3)
ORDER BY badge.virtuemart_product_id

परिणाम निश्चित रूप से त्रुटि है। क्रमशः ...ORDER BY virtuemart_product_id को छोड़कर कोई भी ORDER BY एक त्रुटि के साथ समाप्त होता है।

क्या यह वास्तव में संभव है?

धन्यवाद

0
Lubos Belan 9 सितंबर 2018, 10:13

3 जवाब

सबसे बढ़िया उत्तर

आप यह कोशिश कर सकते हैं। यह एक कृत्रिम मान बनाता है जो इंगित करता है कि डेटा किस तालिका से आया है और फिर आईडी मान से पहले उस मान के आधार पर छाँटता है। डेटासेट को असाइन किए गए मान और सॉर्ट ऑर्डर को बदलकर, आप यह बदल सकते हैं कि कौन से मान पहले आउटपुट हैं:

(SELECT virtuemart_product_id, 0 AS dataset
FROM #__virtuemart_products 
WHERE product_special = 1)
UNION
(SELECT virtuemart_product_id, 1 AS dataset
 FROM #__virtuemart_product_badges
 WHERE badge = 3)
ORDER BY dataset DESC, virtuemart_product_id

संपादित करें

चूंकि केवल एक कॉलम (virtuemart_product_id) को वापस करने की आवश्यकता है, इसलिए आपको इस क्वेरी को एक सबक्वेरी में लपेटना होगा और SELECT virtuemart_product_id से:

SELECT virtuemart_product_id
FROM ((SELECT virtuemart_product_id, 0 AS dataset
       FROM #__virtuemart_products 
       WHERE product_special = 1)
      UNION
      (SELECT virtuemart_product_id, 1 AS dataset
       FROM #__virtuemart_product_badges
       WHERE badge = 3)
      ORDER BY dataset DESC, virtuemart_product_id) v
1
Nick 9 सितंबर 2018, 11:16

यदि आप पहले यूनियन टेबल से परिणाम चाहते हैं तो पहले उस टेबल को उस यूनियन के बाद दूसरी टेबल से चुनें। इस कदर:-

(SELECT virtuemart_product_id
 FROM #__virtuemart_product_badges
 WHERE badge = 3)
UNION
SELECT virtuemart_product_id 
FROM #__virtuemart_products 
WHERE product_special = 1
1
vinay chhabra 9 सितंबर 2018, 10:38

बस कुछ नेस्टेड क्वेरी बनाने का प्रयास करें:

select * from (YOUR ALL QUERY) AS p order by virtuemart_product_id
0
Arkowsky 9 सितंबर 2018, 10:25