MySQL SELECT синтаксическая ошибка внутри оператора IF - PullRequest
0 голосов
/ 16 января 2012

Я застрял в синтаксической ошибке MySQL, и я действительно понятия не имею, где ошибка. Я выполняю довольно большой оператор SELECT, состоящий из нескольких различных select_expr подвыборов:

SELECT
`a`.`id` AS `id`,
`a`.`name` AS `name`,

/* ... */

IF(((SELECT COUNT(*) FROM `position` WHERE (`auftrag_id` = `a`.`id`) AND (`status` < 100)) = 0 ), ( To_days(SELECT `enddatum` FROM `position` WHERE (`auftrag_id` = `a`.`id`) ORDER BY `enddatum` DESC LIMIT 1) - To_days(`a`.`datum`) ), NULL) AS `days`,

/* ... */

FROM
`auftrag` `a`

select_expr, вызывающий ошибку, является промежуточным оператором IF, остальная часть всего оператора работает очень хорошо. Вывод ошибки:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `enddatum` FROM `position` WHERE (`auftrag_id` = `a`.`id`) ORDER B' at line 50 

В чем здесь проблема?

1 Ответ

3 голосов
/ 16 января 2012

(не связано): IF, который у вас есть, не является оператором, это функция.


Поместите подзапрос SELECT:

To_days( SELECT `enddatum` 
         FROM `position` 
         WHERE (`auftrag_id` = `a`.`id`) 
         ORDER BY `enddatum` DESC 
         LIMIT 1
       )

в скобках:

To_days( ( SELECT `enddatum` 
           FROM `position` 
           WHERE (`auftrag_id` = `a`.`id`) 
           ORDER BY `enddatum` DESC 
           LIMIT 1
         )
       )
...