2011-12-09 13 views
20

मैं एक MySQL चयन क्वेरी में IF कथन का उपयोग करने का प्रयास कर रहा हूं।एक MySQL SELECT क्वेरी में एक IF कथन का उपयोग

मुझे AND कथन के बाद एक त्रुटि मिल रही है जहां पहले IF

SELECT J.JOB_ID,E.COMPANY_NAME,J.JOB_DESC,JT.JOBTYPE_NAME,J.COMPENSATION,ST.STATE_NAME,MC.METRO_CITY_NAME,I.INDUSTRY_NAME, 
J.JOB_CONTACT_PERSON,J.DT_INSRT,J.JOB_TITLE,J.JOB_EXP_DATE,J.SKILLS 
FROM JOBS J 
JOIN EMPLOYER E ON J.COMPANY_ID=E.COMPANY_ID 
JOIN LOOKUP_JOBTYPE JT ON J.JOB_TYPE=JT.JOBTYPE_ID 
JOIN LOOKUP_STATE ST ON J.STATE_ID=ST.STATE_ID 
JOIN JOBS_LOCATION JL ON J.JOB_ID=JL.JOB_ID 
JOIN LOOKUP_METRO_CITY MC ON JL.METRO_CITY_ID=MC.METRO_CITY_ID 
JOIN LOOKUP_INDUSTRY I ON J.INDUSTRY_ID=I.INDUSTRY_ID 
JOIN JOBS_QUALIFICATION JQ ON J.JOB_ID=JQ.JOB_ID 
JOIN LOOKUP_DEGREE_QUALIFICATION LDQ ON LDQ.QUALIFICATION_ID = JQ.QUALIFICATION_ID 
WHERE J.ACTIVE='Y' AND J.DT_INSRT > COALESCE(pEmailSntDt,DATE_SUB(SYSDATE(),INTERVAL 4 DAY)) 
AND 
IF(JQ.COURSE_ID=0) 
THEN 
IF(JQ.DEGREE_ID=0) 
THEN J.SKILLS LIKE CONCAT('%', pSkills,'%') 
ELSE 
JQ.DEGREE_ID=pDegreeId OR J.SKILLS LIKE CONCAT('%', pSkills,'%') 
END IF 
ELSE 
JQ.COURSE_ID=pCourseId OR IF(JQ.DEGREE_ID=0) 
         THEN 
         J.SKILLS LIKE CONCAT('%', pSkills,'%') 
         ELSE 
         JQ.DEGREE_ID=pDegreeId OR J.SKILLS LIKE CONCAT('%', pSkills,'%') 
         END IF 
END IF       
GROUP BY J.JOB_ID ORDER BY J.DT_INSRT DESC; 

क्यों नहीं इस काम है और क्या एक MySQL क्वेरी में एक अगर बयान करने के लिए उचित तरीका है?

+1

मुझे नहीं लगता कि आप के लिए उपयोग कर सकते हैं कि एक प्रश्न निर्देश, में एक 'WHERE' खंड का प्रयास करें। हो सकता है कि आप ** 'IF()' ** फ़ंक्शन का उपयोग करके क्वेरी को फिर से लिख सकें? http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if –

+0

क्या आप मुझे स्पष्ट तस्वीर दे सकते हैं – Santosh

उत्तर

41

IF/THEN/ELSE निर्माण जो आप उपयोग कर रहे हैं केवल संग्रहित प्रक्रियाओं और कार्यों में मान्य है। आपकी क्वेरी को पुनर्गठित करने की आवश्यकता होगी क्योंकि आप इस तरह के WHERE खंड के प्रवाह को नियंत्रित करने के लिए IF() फ़ंक्शन का उपयोग नहीं कर सकते हैं।

आईएफ() फ़ंक्शन जिसका उपयोग क्वेरी में किया जा सकता है मुख्य रूप से क्वेरी के SELECT भाग में कुछ स्थितियों के आधार पर अलग-अलग डेटा चुनने के लिए उपयोग किया जाना चाहिए, क्वेरी के WHERE भाग में उपयोग करने के लिए इतना अधिक नहीं है :

SELECT IF(JQ.COURSE_ID=0, 'Some Result If True', 'Some Result If False'), OTHER_COLUMNS 
FROM ... 
WHERE ... 
+0

iam IF का उपयोग करके कॉलम का चयन नहीं कर रहा हूं। मैं शर्तों के आधार पर क्वेरी को फ्रेम करना चाहता हूं IF अन्य का उपयोग कर Iam के लिए। – Santosh

+0

मैं समझता हूं कि, मैं सिर्फ यह समझा रहा हूं कि आईएफ फ़ंक्शन क्या करना है और आप क्वेरी में IF/THEN/ELSE तर्क का उपयोग नहीं कर सकते हैं। यदि आप ऐसा करना चाहते हैं, तो आप अपने तर्क के साथ एक संग्रहीत फ़ंक्शन बना सकते हैं जो आपके WHERE खंड में उपयोग किए जाने वाले मान को लौटाता है। – davidethell

+0

हम CAF के साथ समान बात IF – Santosh

14

MySQL "चयन सूची" में एक अगर बयान उपयोग कैसे करें:

select if (1>2, 2, 3);       //returns 3 
select if(1<2,'yes','no');      //returns yes 
SELECT IF(STRCMP('test','test1'),'no','yes'); //returns no 

जहां खंड खोज हालत सूची MySQL में एक अगर बयान उपयोग कैसे करें:

create table penguins (id int primary key auto_increment, name varchar(100)) 
insert into penguins (name) values ('rico') 
insert into penguins (name) values ('kowalski') 
insert into penguins (name) values ('skipper') 

select * from penguins where 3 = id 
-->3 skipper 

select * from penguins where (if (true, 2, 3)) = id 
-->2 kowalski 

MySQL में "खंड खोज अवस्था से" एक अगर बयान उपयोग कैसे करें:

select * from penguins 
where 1=1 
having (if (true, 2, 3)) = id 
-->1 rico 

उपयोग का चयन करें सूची में इस्तेमाल एक स्तंभ के साथ एक अगर बयान एक निर्णय करने के लिए :

select (if (id = 2, -1, 1)) item 
from penguins 
where 1=1 
--> 1 
--> -1 
--> 1 

एसक्यूएल प्रश्नों में एम्बेडेड बयान एक बुरा "कोड smel है एल "। कोड समीक्षा के दौरान खराब कोड में "डब्ल्यूटीएफ का प्रति मिनट" उच्च है। यह उन चीजों में से एक है। यदि मैं इसे अपने नाम के साथ उत्पादन में देखता हूं, तो मैं स्वचालित रूप से आपके जैसा नहीं जा रहा हूं।

7

इस कोड काम किया मुझे

SELECT user_display_image AS user_image, 
     user_display_name AS user_name, 
     invitee_phone, 
     (CASE WHEN invitee_status = 1 THEN "attending" 
      WHEN invitee_status = 2 THEN "unsure" 
      WHEN invitee_status = 3 THEN "declined" 
      WHEN invitee_status = 0 THEN "notreviwed" 
     END) AS invitee_status 
    FROM your_table 
संबंधित मुद्दे