ठीक है, तो निम्न क्वेरी शायद सबक्वायरी के बिना की जा सकती है, लेकिन इसके बजाय एक जॉइन के साथ। मुझे विश्वास है कि क्वेरी अनुकूलक ऐसा करता है, लेकिन मैं इस बारे में निश्चित नहीं हूं।
SELECT l.name as language,
(SELECT cl.name
FROM country_languages cl
WHERE cl.country_id=[the wanted country id]
ORDER BY cl.language_id=l.id DESC,
cl.language_id=1 DESC
LIMIT 1) as country_name
FROM languages l
इस संस्करण में language_id 1 को पसंदीदा फ़ॉलबैक के रूप में उपयोग किया जाता है, आप शायद इसी तरह से और भाषाएं जोड़ सकते हैं। FIND_IN_SET
का उपयोग करना इसके बजाय दूसरे क्रम का मानदंड भी काम करेगा (FIND_IN_SET(cl.language_id,'1,2,3') DESC
या जो भी ऑर्डर आप पसंद करेंगे)।
बेशक यह प्रश्न अभी एक निश्चित देश_आईडी के लिए है। इसे इसी तरह से कई देशों के लिए एक और जॉइन के साथ बढ़ाया जा सकता है:
SELECT l.name as language,
(SELECT cl.name
FROM country_languages cl
WHERE cl.country_id=c.id
ORDER BY cl.language_id=l.id DESC,
cl.language_id=1 DESC
LIMIT 1) as country_name
FROM countries c
JOIN languages l
उपश्रेणियों का एक विकल्प यह होगा कि आप दो बार देश_भाषाओं में शामिल हों, और केवल पहले वाले का चयन करें जो अशक्त न हो (जो संभवत:क्लीनर समाधानों में से एक है):
SELECT l.name as language,
COALESCE(first.name, second.name) as country_name
FROM countries c
JOIN languages l
LEFT JOIN country_languages first ON
(first.country_id=c.id AND first.language_id=l.id)
LEFT JOIN country_languages second ON
(second.country_id=c.id AND second.language_id=1)
अगर भाषा आईडी 1 आपकी फॉलबैक भाषा है। कई फ़ॉलबैक भाषाएं प्रदान करने के लिए इसका विस्तार भी किया जा सकता है ...