Фильтрация по псевдониму в MySQL - PullRequest
2 голосов
/ 27 ноября 2010

Почему не работает следующий запрос?Mysql жалуется на z - я не могу использовать псевдоним в предложении WHERE?

SELECT x + y AS z, t.*  FROM t
WHERE 
x = 1 and
z = 2

Я получаю ошибку:

Error Code : 1054
Unknown column 'z' in 'where clause'

Ответы [ 3 ]

9 голосов
/ 27 ноября 2010

http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

Стандартный SQL запрещает ссылки на псевдонимы столбцов в предложении WHERE. это ограничение накладывается, потому что, когда предложение WHERE оценивается, значение столбца, возможно, еще не было определяется. Например, следующее запрос недопустим:

SELECT id, COUNT(*) AS cnt FROM tbl_name WHERE cnt > 0 GROUP BY id;

Попробуйте вместо этого:

SELECT x + y AS z, t.* FROM t WHERE x = 1 HAVING z = 2;
3 голосов
/ 27 ноября 2010

Вы должны знать, что использование предложения HAVING без предложения GROUP BY является нестандартным расширением MySQL и не будет работать в других базах данных.

Если вы хотите, чтобы это было переносимо, вам нужно использовать производную таблицу:

SELECT *
FROM (
  SELECT (x + y) AS z, t.*  
  FROM t
  WHERE x = 1 
) t2
WHERE z = 2
0 голосов
/ 27 ноября 2010

Использование, имеющее предложение:

SELECT (x + y) AS z, t.*  FROM t
WHERE 
x = 1 
having z=2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...