MySQL इलेबस ELSEIF यदि चुनिंदा क्वेरी में है


81

मैं उस उत्पाद की अलग-अलग कीमतों का चयन करने की कोशिश कर रहा हूं जो उपयोगकर्ता द्वारा चुनी गई मात्रा पर आधारित है। यह वह क्वेरी है जिस पर मैं काम कर रहा हूं (इसमें एक सिंटैक्स त्रुटि है):

 select id, 
    (SELECT 
    IF(qty_1<='23',price,1)
    ELSEIF(('23'>qty_1 && qty_2<='23'),price_2,1)
    ELSEIF(('23'>qty_2 && qty_3<='23'),price_3,1)
    ELSEIF('23'>qty_3,price_4,1)
    END IF) as total 
 from product;

7
आपको
सर रूफो

जवाबों:


202

आपके पास संदर्भ के लिए इस तरह संग्रहीत प्रक्रियाओं में उपयोग किया गया है , लेकिन वे अभी आपके पास उपयोग किए जाने के लिए अभिप्रेत नहीं हैं। आप IFद्वारा दिखाए गए अनुसार उपयोग कर सकते हैं duskwuff। लेकिन एक Caseबयान आंखों के लिए बेहतर है। ऐशे ही:

select id, 
    (
    CASE 
        WHEN qty_1 <= '23' THEN price
        WHEN '23' > qty_1 && qty_2 <= '23' THEN price_2
        WHEN '23' > qty_2 && qty_3 <= '23' THEN price_3
        WHEN '23' > qty_3 THEN price_4
        ELSE 1
    END) AS total
 from product;

यह साफ दिखता है। मुझे लगता है कि तुम SELECTवैसे भी भीतर की आवश्यकता नहीं है ..


2
हां वास्तव में, यह बेहतर लग रहा है, मैं इस विकल्प को चुनूंगा लेकिन भविष्य के संदर्भों के लिए दोनों दृष्टिकोणों के लिए अच्छा है .. धन्यवाद nawfal
इवान ब्रावो कार्लोस

IF के लिए CASE का उपयोग करना अच्छा लगता है। धन्यवाद नवाफाल
सत्य कल्लूरी

20

IF()MySQL में एक टर्नरी फ़ंक्शन है, न कि एक नियंत्रण संरचना - यदि पहले तर्क में स्थिति सही है, तो यह दूसरा तर्क लौटाता है; अन्यथा, यह तीसरा तर्क देता है। कोई संबंधित ELSEIF()फ़ंक्शन या END IFकीवर्ड नहीं है।

निकटतम चीज़ जो आपको मिली है वह कुछ इस तरह होगी:

IF(qty_1<='23', price,
  IF('23'>qty_1 && qty_2<='23', price_2,
    IF('23'>qty_2 && qty_3<='23', price_3,
      IF('23'>qty_3, price_4, 1)
    )
  )
)

परिस्थितियाँ मेरे लिए कोई मायने नहीं रखतीं (ऐसा लगता है कि उनमें से कुछ अनजाने में उलट हो सकती हैं?), लेकिन यह जानने के बिना कि आप जो पूरा करने की कोशिश कर रहे हैं, उसे ठीक करना मेरे लिए मुश्किल है।


मुझे पता है कि एक मिनट पहले ... उत्पाद का चयन करें, precio, precio_2, precio_3, IF (cant_1> 23, precio, IF (23> cant_1 && cant_2> 23), precio_2, IF (23> cant_2 && cant_3> 23, precio_3) का चयन करें , अगर (23> cant_4, precio_4,1)))) producto से कुल के रूप में बात यह है कि im मेरे मालिकों के अनुरोध के कारण एक स्टैंड-अलोन मूल्य तालिका बनाने में सक्षम नहीं है, जो एक सम्मिलित बनाने और प्राप्त करने के लिए बहुत आसान होगा मूल्य के आधार पर ...
इवान ब्रावो कार्लोस

एक करीबी चीज का उपयोग किया जाएगाcase when (condition) then {computed value} when then else end
ahnbizcad

9

नेस्टेड if () फ़ंक्शंस का उपयोग करते समय मुझे MySQL 5.1.72 में एक बग मिला। .... कॉलम वेरिएबल्स (जैसे qty_1) का मान दूसरे में (या) के अंदर खाली है, तो उसे बेकार कर दिया। इसके बजाय निम्नलिखित निर्माण का उपयोग करें:

case 
  when qty_1<='23' then price
  when '23'>qty_1 && qty_2<='23' then price_2
  when '23'>qty_2 && qty_3<='23' then price_3
  when '23'>qty_3 then price_4
  else 1
end

4

आपके प्रश्न के लिए:

SELECT id, 
   IF(qty_1 <= '23', price,
   IF(('23' > qty_1 && qty_2 <= '23'), price_2,
   IF(('23' > qty_2 && qty_3 <= '23'), price_3,
   IF(('23' > qty_2 && qty_3<='23'), price_3,
   IF('23' > qty_3, price_4, 1))))) as total 
FROM product;

आप MySQL में if - elseनियंत्रण संरचना या IFफ़ंक्शन का उपयोग कर सकते हैं ।

संदर्भ:
http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


1
हालाँकि आपका उत्तर 100% सही है, यह भी 100% बेकार हो सकता है यदि उस लिंक को स्थानांतरित कर दिया जाए, बदल दिया जाए, किसी अन्य में विलय कर दिया जाए या मुख्य साइट गायब हो जाए ... : --( इसलिए, कृपया अपना उत्तर संपादित करें, और संबंधित को कॉपी करें लिंक से आपके उत्तर में कदम, जिससे इस साइट के जीवनकाल के 100% के लिए आपके उत्तर की गारंटी मिलती है ? ;-) आप हमेशा अपने उत्तर के लिए लिंक को अपनी सामग्री के स्रोत के रूप में छोड़ सकते हैं ...
डोनाल्ड डक

2

Nawfal के उत्तर के अनुसार, IF कथन प्रक्रिया में होना चाहिए। मुझे यह पद मिला है जो अभी भी विकसित और परीक्षण करते समय एक प्रक्रिया में आपकी स्क्रिप्ट का उपयोग करने का एक शानदार उदाहरण दिखाता है। असल में, आप प्रक्रिया बनाते हैं, फिर प्रक्रिया को छोड़ देते हैं:

https://gist.github.com/jeremyjarrell/6083251

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.