WHERE子句中的未知列错误

时间:2013-06-03 11:13:25

标签: sql

为什么这个查询:

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 个答案:

答案 0 :(得分: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;那么你可以将标准应用于那个“表”。

答案 1 :(得分:0)

看起来iso_code列来自ps_address表,该表仅在您在主查询(ps_customer)的选择列表中创建的子查询的上下文中可用。

除此之外,您在主查询中不需要此WHERE语句,因为您已经限制了子查询中的iso_code值。删除它,它应该没问题。

答案 2 :(得分:0)

上述SQL无效,因为执行按以下顺序开始

FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY

这样,列的别名将被指定为执行中的第二个最后一步,并且WHERE在它之前发生。所以SQL引擎永远不会知道iso_code在这里。

希望这有帮助。