2017-02-07 7 views
5

मैं वर्तमान में एक SQL क्वेरी करने का प्रयास कर रहा हूं जो पता लगा सकता है कि कोई SELECT क्वेरी कुछ नहीं लौटाती है, और फिर ऐसा कोई अन्य कार्य करता है।एसक्यूएल - अगर चयन कुछ भी नहीं करता है तो दूसरा चुनें

IF SELECT * FROM table WHERE criteria = criteria RETURNS NO ROWS 
THEN SELECT * FROM table WHERE criteria2 = criteria2 

यह संभव है:

यहाँ मैं क्या मतलब है? मुझे नहीं लगता कि एक खाली उत्तर "शून्य" के रूप में गिना जाता है, इसलिए मुझे इसके साथ कुछ परेशानी है।

+4

आप किस विशिष्ट डेटाबेस का उपयोग कर रहे हैं? –

+0

मैं पोस्टग्रेस्क्ल का उपयोग कर रहा हूं। नीचे दिया गया समाधान इसके साथ काम किया। –

उत्तर

6

आप एक बयान में यह कर सकते हैं, यह मानते हुए कॉलम में एक ही कर रहे हैं:

SELECT * 
FROM table 
WHERE criteria = criteria 
UNION ALL 
SELECT * 
FROM table 
WHERE criteria2 = criteria2 AND 
     NOT EXISTS (SELECT 1 FROM table WHERE criteria = criteria); 
+0

धन्यवाद गॉर्डन, यह वास्तव में अच्छी तरह से काम किया। तुम जानवर हो :) –

3

आप उपयोग कर सकते हैं NOT EXISTS:

SELECT * FROM table WHERE criteria2 = criteria2 
and not exists (
    SELECT * FROM table WHERE criteria = criteria 
) 
union all 
SELECT * FROM table WHERE criteria = criteria; 

यहाँ NOT EXISTS सुनिश्चित करता है कि यूनिअन सभी के दोनों भाग दिया जाता है । यदि दूसरा criteria = criteria गुजरता है, तो NOT EXISTS झूठी वापसी करेगा और इसलिए, उपर्युक्त क्वेरी का केवल दूसरा भाग परिणाम देता है। यदि ऐसा नहीं होता है, तो इसका मतलब है कि criteria = criteria के साथ कोई पंक्ति नहीं है और EXISTS सत्य वापस नहीं आ जाएंगे और इसलिए, केवल प्रथम भाग डेटा लौटाएगा।

+0

स्पष्टीकरण के लिए धन्यवाद, गुरविंदर। :) समझने में आसान बना दिया। –

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