Mysql 使用子查询时WHERE子句中的未知列

Mysql 使用子查询时WHERE子句中的未知列,mysql,sql,subquery,where-clause,Mysql,Sql,Subquery,Where Clause,我的问题如下: 选择*, 从'users'中选择'name',其中'users'。'id`=```` 作为'listings'中的'fullName',其中'fullName'类似于'%praveen%'; 但当我执行上述查询时,我得到了以下错误: #1054 - Unknown column 'fullName' in 'where clause' 我知道这只虫子已经死了。我不确定这方面的解决办法是什么,除了做以下事情: SELECT *, ( SELECT `name` FROM

我的问题如下:

选择*, 从'users'中选择'name',其中'users'。'id`=```` 作为'listings'中的'fullName',其中'fullName'类似于'%praveen%'; 但当我执行上述查询时,我得到了以下错误:

#1054 - Unknown column 'fullName' in 'where clause'
我知道这只虫子已经死了。我不确定这方面的解决办法是什么,除了做以下事情:

SELECT *, (
    SELECT `name` FROM `users` WHERE `users`.`id`=`listings`.`user`
) FROM `listings` WHERE (SELECT `name` FROM `users` WHERE users`.`id`=`listings`.`user`) LIKE '%praveen%';
除了创建视图或使用类似于上述的查询之外,还有其他方法可以做到这一点吗?我试着提出其他问题:


我找不到更好的解决办法。在这种情况下我能做的最好的是什么?提前感谢。

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

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

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

您可以使用一个变量:

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

这看起来像三重子查询!它应该更快;在这种情况下,您没有理由在选择列表中有子查询。