2015-01-22 1 views
0

У меня возникла следующая проблема. Я хочу выполнить как sql-оператор, который фильтрует результаты с помощью HAVING. Однако наличие находится в столбце, который вычисляется из функции IF() внутри выбора. Таким образом, сервер MySQL жалуется, что столбец внутри предложения не известен!Идентификатор столбца не работает для группы, где и у меня есть MySQL

EX:

SELECT col1,col2,IF(expr1,expr2,expr3) AS `wantedColumn` 

FROM.... 

WHERE ... 

HAVING LENGTH(`wantedColumn)>0 

Это как MySQL не может понять, что столбец, возвращаемый если выражение называется wantedColumn ... Если я использую другие столбцы она работает правильно. Но мне нужно отфильтровать это. Какие-либо предложения? Благодаря

ответ

0

Ответа на этот комментарий от Inanda Menezes @Inanda:

Посмотрите на это: sqlfiddle.com/#!2/5294e4/6, я просто удалил обратные ссылки из псевдонима, используемого внутри, и ваш пример работал. Согласно документации mysql, вам не нужно использовать обратные ссылки на идентификаторах, которые не имеют специальных слов или символов. Если вы используете , это в большинстве случаев не приведет к сбою вашего запроса, но это вообще не нужно указывать нормальные идентификаторы с нестандартным escape. Во всяком случае, кажется, что он не сработает, когда сбегает с backsticks псевдоним в предложение, в котором используется функция длины, поэтому просто не избегайте этого . - Inanda Menezes

2

Это происходит из-за конфигурации режима:

Если база данных с использованием режима «ONLY_FULL_GROUP_BY», вы не сможете использовать псевдоним столбца в WHERE, GROUP BY или HAVING, он делает не работа. Вы должны либо повторить все выражение, либо использовать дополнительный запрос.

Для того, чтобы знать, если вы используете режим «ONLY_FULL GROUP_BY», используйте следующий запрос:

SELECT @@sql_mode; 

Если вы хотите изменить его в режим, который позволяет ему:

SET SESSION sql_mode =STRICT_TRANS_TABLES; 

Чтобы узнать больше о SQL режимах: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

+0

Благодарим вас за ответ. Я уже пытался повторить его все выражение в разделе where, и оно работает. Моя проблема заключается не в том, что я вообще не могу использовать псевдоним colum. Потому что, если я использую наличие со ссылкой на другой псевдоним столбца, он работает. Я не могу использовать псевдоним столбца в столбце, создаваемом предложением if. – mitsos1os

+0

Также обратите внимание, что, хотя проблема существует в версии mysql 5.5, проверенной на онлайн-узле, она не существует на локальном сервере mysql 5.6. Он работает так, как должен, и не жалуется на неизвестный атрибут на локальном сервере 5.6. – mitsos1os

+0

В SQLfiddle.com версии 5.5.32 (режим STRICT_TRANS_TABLES) он работает. –