имея условие на результат подзапроса в MySQL - PullRequest
2 голосов
/ 13 мая 2010

я пытаюсь выполнить запрос, подобный этому

SELECT a, b , c, (SELECT INNULL(x,y)) as mycol WHERE mycol < 400 ;

Но это дает ошибку

#1054 - Unknown column 'mycol' in 'where clause'

Каков был бы правильный способ сделать это?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 13 мая 2010

Это так в MS SQL , поэтому я предполагаю, что та же проблема в MySQL .

Попробуйте изменить ГДЕ на ИМЕЯ . WHERE предложение не видит ваши переименованные столбцы.

HAVING работает так же, как WHERE, как (mycol <400 AND a> 5).

GROUP BY должно быть до HAVING .

Проверьте примеры в ссылке.

http://www.databasejournal.com/features/mysql/article.php/3469351/The-HAVING-and-GROUP-BY-SQL-clauses.htm

0 голосов
/ 12 октября 2016

@ хгулян Я сомневаюсь в вашем ответе. Это не переименование, которое мешает использовать предложение WHERE, скорее это подзапрос. Допустим, у меня есть запрос:

SELECT id as ID FROM user WHERE ID > 10;

Это будет прекрасно работать.
Теперь допустим, у меня есть еще один запрос:

SELECT name, (SELECT id FROM user_detail WHERE user_id = 20) as ID FROM user WHERE ID > 19;

Этот конкретный запрос выдаст ошибку как:

Неизвестный идентификатор столбца

Итак, речь идет об использовании псевдонимов подзапросов и столбцов, а не только псевдонимов столбцов. Таким образом, в этом случае вам придется использовать HAVING вместо WHERE.

...