2017-07-04 28 views
-1

我有以下查詢:MySQL的IF ELSE語句的語法錯誤

SELECT 
    * 
FROM 
    `hssData` 
WHERE 
    `group` = 'LGA_737_CA' 
    AND (
     `pos` = 'CA' OR `pos` = 'RC' 
    ) 
    AND (
     `depTimeInt` >= 0 AND `depTimeInt` <= 1440 
    ) 
    AND (
     `arrTimeInt` >= 1050 OR `arrTimeInt` <= 45 
    ) 
    AND `days` >= 1 
    AND `days` <= 2 
ORDER BY 
    `depTime` ASC 
LIMIT 
    0, 100 

......除了當arrTimeInt <= 45我想:

`days` >= 1 AND `days` <= 1 

而且不

`days` >= 1 AND `days` <= 2 

我有嘗試過:

 SELECT 
    * 
FROM 
    `hssData` 
WHERE 
    `group` = 'LGA_737_CA' 
    AND (
     `pos` = 'CA' OR `pos` = 'RC' 
    ) 
    AND (
     `depTimeInt` >= 0 AND `depTimeInt` <= 1440 
    ) 
    AND (
     `arrTimeInt` >= 1050 OR `arrTimeInt` <= 45 
    ) 
    AND (
     IF (`arrTimeInt` < 45) THEN (
      `days` <= 1 AND `days` <= 3 
     ) ELSE (
      `days` <= 1 AND `days` <= 2 
     ) 
    ) 
ORDER BY 
    `depTime` ASC 
LIMIT 
    0, 100 

但這會引發語法錯誤。

我無法獲得正確的語法。我究竟做錯了什麼?語法錯誤是:

#1064 - 您的SQL語法錯誤;檢查對應於您的MySQL服務器版本的正確的語法使用 附近的手冊 ')THEN( days < = 1 AND days < = 2 )ELSE( days < = 1 A' 在第20行

+1

添加錯誤消息請 – Jens

+1

「這將引發一個語法錯誤」 _What_錯誤? –

+1

'days> = 1 AND days <= 1'這個布爾邏輯的唯一解決方案是'days = 1' – Martin

回答

0

您正在嘗試一個procedural construct在非程序性方面

在一個SELECT(或UPDATE或DELETE)語句,你需要使用IF function(或CASE)因此:

SELECT 
    * 
FROM 
    `hssData` 
WHERE 
    `group` = 'LGA_737_CA' 
    AND (
    `pos` = 'CA' 
    OR `pos` = 'RC' 
) 
    AND ( // brackets in this clause are redundant 
    `depTimeInt` >= 0 
    AND `depTimeInt` <= 1440 
) 
    AND (
    `arrTimeInt` >= 1050 
    OR `arrTimeInt` <= 45 
) 
    AND `days` >= 1 
    AND `days` <= IF(`arrTimeInt` <= 45, 1, 2) 
ORDER BY 
    `depTime` ASC 
LIMIT 
    0, 100 
+0

這正是我需要的..謝謝。 – rob345