2011-12-09 94 views
20

Tôi đang cố sử dụng câu lệnh IF trong truy vấn chọn MySQL.Sử dụng câu lệnh IF trong truy vấn SELECT MySQL

Tôi gặp lỗi sau câu hỏi AND trong đó IF đầu tiên.

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; 

Tại sao tính năng này không hoạt động và cách đúng để thực hiện câu lệnh IF trong truy vấn MySQL là gì?

+1

Tôi không nghĩ rằng bạn có thể sử dụng điều khoản đó hướng dẫn trong một truy vấn, trong một 'WHERE'. Có lẽ bạn có thể viết lại truy vấn bằng cách sử dụng hàm ** 'IF()' ** thay thế? http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if –

+0

bạn có thể cho tôi hình ảnh rõ ràng – Santosh

Trả lời

41

Cấu trúc IF/THEN/ELSE bạn đang sử dụng chỉ hợp lệ trong các thủ tục và chức năng được lưu trữ. Truy vấn của bạn sẽ cần phải được cấu trúc lại vì bạn không thể sử dụng hàm IF() để kiểm soát luồng của mệnh đề WHERE như thế này. Hàm IF() có thể được sử dụng trong truy vấn chủ yếu được sử dụng trong phần SELECT của truy vấn để chọn dữ liệu khác nhau dựa trên các điều kiện nhất định, không được sử dụng nhiều trong phần WHERE của truy vấn :

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

iam không chọn cột bằng IF.I muốn truy vấn khung dựa trên điều kiện .cho rằng iam sử dụng IF Khác. – Santosh

+0

Tôi hiểu rằng, tôi chỉ giải thích đó không phải là chức năng IF có ý nghĩa gì và bạn không thể sử dụng logic IF/THEN/ELSE trong các truy vấn. Nếu bạn muốn làm điều này, bạn có thể tạo một hàm được lưu trữ với logic của bạn trả về một giá trị mà bạn có thể sử dụng trong mệnh đề WHERE của bạn. – davidethell

+0

chúng ta có thể sử dụng báo cáo CASE thay vì IF – Santosh

14

Làm thế nào để sử dụng một câu lệnh IF trong MySQL "danh sách lựa chọn":

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 

Làm thế nào để sử dụng một câu lệnh IF trong MySQL nơi danh sách điều kiện tìm kiếm khoản:

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 

Làm thế nào để sử dụng một câu lệnh IF trong MySQL "có điều kiện tìm kiếm khoản":

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

Sử dụng một IF tuyên bố với một cột được sử dụng trong danh sách lựa chọn để đưa ra quyết định :

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

Nếu câu lệnh được nhúng trong truy vấn SQL là lỗi "mã smel" l ". Mã lỗi có "WTF trên phút" cao trong khi xem xét mã. Đây là một trong những điều đó. Nếu tôi thấy điều này trong sản xuất với tên của bạn trên đó, tôi sẽ tự động không thích bạn.

7

thử mã này làm việc cho tôi

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 
Các vấn đề liên quan