मैसकल केस के दो प्रकारों का समर्थन करता है, जिसे आप क्वेरी 2 में उपयोग करते हैं वह कम लचीला है लेकिन एक चर पर केवल समानता का समर्थन करता है। दूसरा संस्करण मामले के बाद कोई चर निर्दिष्ट नहीं करता है और फिर शर्तों को केवल समानता की आवश्यकता नहीं है:
select id_tag,
case
when tag LIKE "%class%" then "class"
when tag LIKE "%new%" then "new"
when tag LIKE "%pack%" then "pack"
end as matching_tag
from Tags
where tag LIKE "%class%" OR tag LIKE "%new%" OR tag LIKE "%pack%"
देखें दस्तावेज़ीकरण अधिक जानकारी के लिए
संपादित करें:यहां कुछ और स्पष्टीकरण दिया गया है कि आपकी क्वेरी # 1 ने जो लौटाया वह वापस क्यों आया:
case tag
when tag LIKE "%class%" then "class"
when tag LIKE "%new%" then "new"
when tag LIKE "%pack%" then "pack"
end as matching_tag
when ... then
. के बीच तुलना के लिए एक शाब्दिक मूल्य प्राप्त करने की अपेक्षा करता है उपरोक्त मामले में भाव tag LIKE "%class%"
, tag LIKE "%new%"
और tag LIKE "%pack%"
वास्तविक मामले की तुलना से पहले सभी का मूल्यांकन किया जाता है। हालांकि (!), क्या होता है कि वे या तो 0 या 1 हो जाते हैं और जब टैग के मूल्य की तुलना में यह 0 का पहला मान होता है जो किसी भी चार से मेल खाएगा (चार को डाला जाएगा 0) - यह आपकी पहली क्वेरी के परिणामों के अनुरूप है।
यहां एक क्वेरी है जो प्रासंगिक अभिव्यक्तियों के लिए तार्किक मान दिखाती है:
select id_tag, tag LIKE "%class%", tag LIKE "%new%", tag = 0, case tag when tag LIKE "%class%" then "class" when tag LIKE "%new%" then "new" when tag LIKE "%pack%" then "pack" end as matching_tag from Tags where tag LIKE "%class%" OR tag LIKE "%new%" OR tag LIKE "%pack%";
इसलिए आपको अप्रत्याशित परिणाम मिलते हैं; साइलेंट कास्ट यहां एक मानक नुकसान है।