आप सही रास्ते पर हैं। बस एक order by
:
SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%' OR ord = 0
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;
या, वैकल्पिक रूप से:
ORDER BY ord DESC
इनमें से कोई भी ord = 0
डाल देगा अंतिम पंक्ति।
संपादित करें:
इरविन एक अच्छी बात सामने लाते हैं कि अनुक्रमणिका उपयोग के दृष्टिकोण से, एक OR
WHERE
. में खंड सबसे अच्छा तरीका नहीं है। मैं अपने उत्तर को निम्न के रूप में संशोधित करूंगा:
SELECT *
FROM ((SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%'
LIMIT 1
)
UNION ALL
(SELECT street, zip, city
FROM address
WHERE ord = 0
LIMIT 1
)
) t
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;
यह क्वेरी को दो इंडेक्स (street
.) का उपयोग करने की अनुमति देता है और ord
) ध्यान दें कि यह वास्तव में केवल इसलिए है क्योंकि LIKE
पैटर्न वाइल्डकार्ड से शुरू नहीं होता है। अगर LIKE
पैटर्न वाइल्डकार्ड से शुरू होता है, तो क्वेरी का यह रूप अभी भी एक पूर्ण तालिका स्कैन करेगा।