2013-06-03 2 views
0

Почему этот запрос:Неизвестная ошибка столбца в ИНЕКЕ

SELECT SQL_CALC_FOUND_ROWS,a.*,(SELECT cy.iso_code 
           FROM ps_address AS addr, ps_country AS cy 
           WHERE addr.id_customer=a.id_customer 
           AND addr.id_country=cy.id_country) iso_code 
FROM `ps_customer` a       
WHERE iso_code='IT'       
ORDER BY a.`id_customer` ASC 
LIMIT 0,50 

Вернуться меня: #1054 - Unknown column 'iso_code' in 'where clause'?

ответ

3

От the documentation on SELECT:

Это не допустимо ссылаться на псевдоним столбца в WHERE потому что значение столбца еще не может быть определено, когда выполняется условие WHERE. См. Section C.5.5.4, “Problems with Column Aliases”.

Вы не можете использовать псевдонимы столбцов в своем предложении WHERE — вы можете использовать только столбцы, которые на самом деле существуют в одной из таблиц, используемых в запросе.

Вы можете wrap the subquery so that its result is treated as a "table" in its own right; то вы можете применить критерии к этой «таблице».

0

Похоже, что столбец iso_code происходит из таблицы ps_address, доступной только в контексте подзапроса, который вы делаете внутри списка выбора вашего основного запроса (ps_customer).

Кроме того, вам не нужен этот оператор WHERE в основном запросе, поскольку вы уже ограничиваете значения iso_code в подзапросе. Удалите его, и все должно быть хорошо.

+0

Это было мое первое предложение, но это '(SELECT ...) iso_code' – WiiMaxx

0

выше SQL не будет работать, потому что выполнение начинается в следующем порядке

FROM 
WHERE 
GROUP BY 
HAVING 
SELECT 
ORDER BY 

Так что псевдонимы столбцов будет назначен в качестве второго последнего шага выполнения и WHERE происходит перед ним. Поэтому SQL-движок никогда не узнает, что такое iso_code.

Надеюсь, это поможет.

Смежные вопросы