2012-01-03 3 views
0

Попытка заставить этот запрос работать. Думаю, у меня проблемы с скобками.Ошибка запроса Mysql с операторами if в select

SELECT (fielda - fieldb - ( 
IF ((cola <= 5), 
    1, 
    IF ((cola >= 6 AND cola <= 12), 
     2, 
     IF ((cola >= 13 AND cola <= 20), 
      3, 
      IF ((cola >= 21 AND cola <= 28), 4) 
      ) 
     ) 
    ))) 
AS result FROM the table r WHERE r.fieldx = 3148 AND cola <= 18 ORDER BY result LIMIT 1 

Mysql возвращает: У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего MySQL-сервера, для правильного синтаксиса для использования рядом с символом «))))) AS result FROM

+0

добавил несколько отступов, которые облегчают подсчет скобок; выглядит до сих пор. Можете ли вы опубликовать сообщение об ошибке? – Nicolas78

+0

вы можете попытаться убрать внешние скобки, по крайней мере, нет причин их иметь, и, возможно, они даже создают проблемы – Nicolas78

ответ

0

Последний IF не имеет аргумента else. Хотя можно было бы ожидать, что MySQL так или иначе это понимает, он не является действительным синтаксисом в соответствии с http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if

+0

Да, последний ЕСЛИ не хватает другого ... спасибо! – Jamie

0

Если бы мне пришлось угадать (и по информации, предоставленной вами), я бы сказал, в последнем IF() отсутствует условие else, из-за которого математическая функция терпит неудачу.

IF ((cola >= 21 AND cola <= 28), 4, ???) 

Заполнение вопросительных знаков значением «все остальное не соответствует»/«по умолчанию», и вы должны быть в безопасности. Тем не менее, I верят mysql (при условии, что это поле с непустым значением) будет использовать значение по умолчанию для столбца type /, если вы укажете NULL как условие else (но я могу ошибаться).

Смежные вопросы