Не работает WHERE, не видит ALIAS столбец

tartas

Мастер
Регистрация
5 Сен 2010
Сообщения
294
Реакции
31
Всем привет.

Все просто до банальности :
SELECT *,(SELECT count(*) FROM table1 WHERE city=cities.id) as 'c1' FROM cities WHERE c1=100 order by c1 desc LIMIT 10

Оператор WHERE c1=100 не хочет видеть новосозданный столбик с1. По остальным столбикам условие выполняется, без where все работает.

Помогите понять ошибку!
 
дело в том что c1 формируется непосредственно в выборке и по нему where в принципе делать неправильно, здесь надо делать having в конце с таким же условием

Код:
SELECT *,(SELECT count(*) FROM table1 WHERE city=cities.id) as 'c1' FROM cities having c1=100 order by c1 desc LIMIT 10
 
Всем привет.

Все просто до банальности :
SELECT *,(SELECT count(*) FROM table1 WHERE city=cities.id) as 'c1' FROM cities WHERE c1=100 order by c1 desc LIMIT 10

Оператор WHERE c1=100 не хочет видеть новосозданный столбик с1. По остальным столбикам условие выполняется, без where все работает.

Помогите понять ошибку!
здесь лучше обойтись без подзапросов, они тормозят из-за того, что не используются индексы.
SELECT c.id, c.field1, c.field2, COUNT(c.id) as count
FROM cities c
LEFT JOIN table1 t1 ON t1.city=c.id
GROUP BY t.id
HAVING count>100

также не желательно писать * в запросах, я давно уже себя приучил перечислять поля которые мне нужны. так, если таблица будет расти, вы не будете все время вытягивать поля, которые вам могут не понадобится. это экономия времени и семантичность кода.
 
здесь лучше обойтись без подзапросов, они тормозят из-за того, что не используются индексы.
SELECT c.id, c.field1, c.field2, COUNT(c.id) as count
FROM cities c
LEFT JOIN table1 t1 ON t1.city=c.id
GROUP BY t.id
HAVING count>100
Ну хотелось же человеку использовать вложенный селект! За что вы его так? Тем более, что скорее там объемы и не позволят отследить разницу по быстродействию. К тому же иногда могут и быстреее оказаться - не в этом случае, конечно
 
Назад
Сверху