/ / MySQL - एक मान के लिए क्वेरी कैसे करें लेकिन दूसरे के लिए डिफ़ॉल्ट? - माई एसक्यूएल

MySQL - एक मान के लिए क्वेरी कैसे करें लेकिन दूसरे के लिए डिफ़ॉल्ट? - माई एसक्यूएल

मैंने पिछले धागे में कई पंक्तियों के बारे में सवाल पूछा था, लेकिन अब मुझे एक पंक्ति के बारे में जानने की जरूरत है। यह एक उदाहरण क्वेरी है:

SELECT * FROM table1 WHERE this = 5 LIMIT 1

लेकिन अगर कोई पंक्तियाँ नहीं मिली हैं, तो मैं इसे फिर से एक अलग मूल्य के साथ रिकॉर्ड ढूंढना चाहूंगा:

SELECT * FROM table1 WHERE this = 1 LIMIT 1

तो मैं क्या चाहता हूं, 5 के मान के साथ एक पंक्ति ढूंढें, यदि नहीं मिली है तो 1. के मान के साथ एक पंक्ति खोजने के लिए डिफ़ॉल्ट है। मैं एक ही प्रश्न में कैसे कर सकता हूं? एक OR कथन काम करेगा?

SELECT * FROM table1 WHERE this = 5 OR this = 1 LIMIT 1

OR कथन का क्रम खोजने का प्रयास करेगा5 के मान के साथ कोई भी पंक्ति, अगर मिल जाती है तो वह रुक जाएगी और पंक्ति वापस कर देगी? यदि नहीं मिला तो 1 देखें और फिर उस पंक्ति को वापस करें? यदि नहीं, तो मैं इसे एक एकल क्वेरी के साथ कैसे करता हूं जहां यह एक मान की खोज करता है, यदि अन्य मूल्य खोजने के लिए चूक नहीं मिली?

मैं इस प्रश्न को सोच रहा था:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this ASC LIMIT 1

हालाँकि यह मान हमेशा 1 के साथ मान लौटाएगा यदि दोनों मान सही पाए गए? इसलिए मैंने यह कोशिश की:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

लेकिन यह हमेशा 5 का मान लौटाएगा यदि दोनों पंक्तियाँ सही पाई गईं?

उत्तर:

उत्तर № 1 के लिए 1

आपका प्रश्न खोज को प्राथमिकता देने के लिए प्रकट होता है5 के लिए और केवल अगर नहीं मिला तो 1 की खोज करें। इसलिए आपका दूसरा समाधान आवश्यकता को ठीक करता है। यह 5 का मान लौटाएगा भले ही 5 केवल पाया गया हो या 5 और 1 दोनों मौजूद हो।

दूसरा विकल्प

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

जवाब के लिए 0 № 2

इसे इस्तेमाल करे

SELECT *
FROM table1 tab
WHERE tab.this = IF((SELECT COUNT(*)
FROM table1
WHERE this = 5) > 0, 5, 1)

IF के अंदर क्वेरी काउंट के लिए जाँच कर रही है।

मुझे प्रदर्शन पर यकीन नहीं है, लेकिन मुझे लगता है कि यह आपके मुद्दे को हल करता है।