【问题标题】:Unknown column in WHERE clause when using subquery使用子查询时 WHERE 子句中的未知列
【发布时间】:2014-08-17 00:32:19
【问题描述】:

我有如下查询:

SELECT *, (
    SELECT `name` FROM `users` WHERE `users`.`id`=``.``
) AS `fullName` FROM `listings` WHERE `fullName` LIKE '%praveen%';

但是当我执行上面的查询时,我得到了这个错误:

#1054 - Unknown column 'fullName' in 'where clause'

我知道这个错误一直是documented。除了执行以下操作之外,我不确定有什么解决方法:

SELECT *, (
    SELECT `name` FROM `users` WHERE `users`.`id`=`listings`.`user`
) FROM `listings` WHERE (SELECT `name` FROM `users` WHERE users`.`id`=`listings`.`user`) LIKE '%praveen%';

除了创建视图或使用上述查询之外,还有其他方法可以做到这一点吗?我试过参考其他问题:

我找不到更好的解决方案。在这种情况下,我能做的最好的事情是什么?提前致谢。

【问题讨论】:

    标签: mysql sql subquery where-clause


    【解决方案1】:

    我认为这是您所追求的正确语法:

    select l.*, u.name as fullname
      from listings l
      join users u
        on l.user = u.id
     where u.name like '%praveen%'
    

    【讨论】:

    • 应该更快;在这种情况下,您没有理由在 SELECT 列表中有子查询。
    【解决方案2】:

    试试这个....

    SELECT *
    FROM 
       (
        SELECT *
            , (SELECT `name` 
               FROM `users` WHERE `users`.`id`=``.``
               ) AS `fullName` 
        FROM `listings` 
       ) Q
    WHERE `Q`.`fullName` LIKE '%praveen%';
    

    【讨论】:

    • 这看起来像三重子查询!
    【解决方案3】:

    你可以使用变量:

    SELECT *, @var_fullName := (
        SELECT `name` 
        FROM `users` 
        WHERE `users`.`id`=``.``
    ) AS `fullName` 
    FROM `listings` 
    WHERE @var_fullName LIKE '%praveen%';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多