【问题标题】:Unknown column when using subquery result column in WHERE clause在 WHERE 子句中使用子查询结果列时的未知列
【发布时间】:2014-07-10 07:04:00
【问题描述】:

我有几张表要加入以使用COUNT() 选择总计列。此查询非常适合返回 total 列:

SELECT *,`excel`.`drivers`.`AutoNumber` AS `current_driver`,
(SELECT COUNT(`issues`.`categories`.`points`) FROM `issues`.`points` INNER JOIN `excel`.`drivers` ON `issues`.`points`.`driver_id` = `excel`.`drivers`.`AutoNumber` INNER JOIN `issues`.`categories` ON `issues`.`categories`.`id` = `issues`.`points`.`category_id` WHERE `excel`.`drivers`.`AutoNumber`=`current_driver`) AS `total` 
FROM `issues`.`points` 
INNER JOIN `excel`.`drivers` ON `issues`.`points`.`driver_id` = `excel`.`drivers`.`AutoNumber` 
INNER JOIN `issues`.`categories` ON `issues`.`categories`.`id` = `issues`.`points`.`category_id`

但现在我正在尝试创建一个查询来比较 WHERE 子句中的total,如下所示:

SELECT *,`excel`.`drivers`.`AutoNumber` AS `current_driver`,
(SELECT COUNT(`issues`.`categories`.`points`) FROM `issues`.`points` INNER JOIN `excel`.`drivers` ON `issues`.`points`.`driver_id` = `excel`.`drivers`.`AutoNumber` INNER JOIN `issues`.`categories` ON `issues`.`categories`.`id` = `issues`.`points`.`category_id` WHERE `excel`.`drivers`.`AutoNumber`=`current_driver`) AS `total` 
FROM `issues`.`points` 
INNER JOIN `excel`.`drivers` ON `issues`.`points`.`driver_id` = `excel`.`drivers`.`AutoNumber` 
INNER JOIN `issues`.`categories` ON `issues`.`categories`.`id` = `issues`.`points`.`category_id` WHERE `total` = 3

这会返回一个错误,即total 是一个未知列。有什么想法吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    不能在WHERE 子句中使用列别名。试试

    select a.* 
    FROM 
    (
    SELECT [column_list]
    ,`excel`.`drivers`.`AutoNumber` AS `current_driver`,
    (SELECT COUNT(`issues`.`categories`.`points`) FROM `issues`.`points` INNER JOIN `excel`.`drivers` ON `issues`.`points`.`driver_id` = `excel`.`drivers`.`AutoNumber` INNER JOIN `issues`.`categories` ON `issues`.`categories`.`id` = `issues`.`points`.`category_id` WHERE `excel`.`drivers`.`AutoNumber`=`current_driver`) AS `total` 
    FROM `issues`.`points` 
    INNER JOIN `excel`.`drivers` ON `issues`.`points`.`driver_id` = `excel`.`drivers`.`AutoNumber` 
    INNER JOIN `issues`.`categories` ON `issues`.`categories`.`id` = `issues`.`points`.`category_id`
    )a 
    WHERE a.`total` >3
    

    您还可以在 WHERE 中重复“总计”的整个定义 - 智能优化器很可能会生成相同的计划,但为了便于阅读,我不会这样做。

    【讨论】:

    • 完美。我现在对使用列别名有了更好的了解,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多