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

时间:2014-08-17 00:32:19

标签: mysql sql subquery where-clause

我有如下查询:

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%';

除了创建视图或使用上述查询之外,还有其他方法吗?我试过引用其他问题:

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

试试这个......

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

答案 2 :(得分:0)

您可以使用变量:

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