2010-11-08 2 views
0

Мой запрос:Почему я не могу использовать определенную переменную в тех случаях, когда пункт

SELECT 
    offer, 
    (SELECT 
     AVG(offer) 
    FROM 
     project_bids 
) as var1 
FROM 
    `project_bids` 
WHERE 
    offer > var1 

Это вызывает «# 1054 - Неизвестный столбца„var1“в„где предложение“» ошибка. Кто-нибудь может объяснить, почему дает эту ошибку? (Я знаю, работает SQL, но я хочу, чтобы узнать, почему он не)

ответ

3

Последовательность выполнения положений в ЗЕЬЕСТ упоминается здесь:

http://blog.sqlauthority.com/2007/06/14/sql-server-easy-sequence-of-select-from-join-where-group-by-having-order-by/

Псевдоним столбца не может быть использован в любом пункте, за исключением последнего пункта «ORDER BY».

+0

хороший ответ. Но вы могли бы просто отредактировать свой другой ответ. – Kamal

+0

Я думаю, что приведенный порядок неверен: предложение 'SELECT' разрешено между' HAVING' и 'ORDER BY' - вот почему только' ORDER BY' может ссылаться на предложение 'AS' столбца ('alias'). – onedaywhen

+0

... Фактически, я почти уверен, что в статье подробно описывается формат предложения SELECT (т. Е. Последовательность, которую должны быть написаны в коде), а не порядок выполнения. См. Последний комментарий («Мартин»). – onedaywhen

0

записать его, как показано ниже:

ВЫБЕРИТЕ предложение, (SELECT AVG (предложение) FROM project_bids) в var1 FROM project_bids WHERE предложение> (SELECT AVG (предложение) оТ project_bids)

1

вы должны двигаться «var1» из where и положить в него на having заявление

where заявление не имеет доступа к столбцам, созданных в операторе отбора