2011-12-09 29 views
20

我试图在MySQL select查询中使用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查询中执行IF语句的正确方法?

+1

我不认为你可以使用在查询指令,在'WHERE'条款。也许你可以用**'IF()'**函数来重写查询呢? http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if –

+0

你能给我清晰的图片吗 – Santosh

回答

41

您正在使用的IF/THEN/ELSE构造仅在存储过程和函数中有效。您的查询将需要重新构造,因为您不能使用IF()函数来控制这样的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 Else的Iam。 – Santosh

+0

我明白,我只是解释说,这不是IF函数的意图,你不能在查询中使用IF/THEN/ELSE逻辑。如果你想这样做,你可以用你的逻辑创建一个存储函数,该函数返回一个你可以在你的WHERE子句中使用的值。 – davidethell

+0

我们可以使用CASE语句而不是IF – Santosh

14

如何在MySQL “列表中选择” 使用IF语句:

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 

如何使用IF语句在MySQL WHERE子句检索条件的列表:

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的“having子句的搜索条件” IF语句:

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

使用在选择列表中使用的列IF语句做出决定:

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

如果SQL查询中嵌入的语句是坏的“code smel L”。代码审查期间,错误代码的“每分钟WTF数”很高。这是其中的一件事。如果我在制作中看到你的名字,我会自动不喜欢你。

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