MySQL查询select / join concat错误

时间:2012-07-13 04:13:16

标签: mysql

执行此查询的正确方法是什么?另外,我想从fullname修剪空格,因为如果中间是空的,它仍会返回它之前和之后的空格。

SELECT first,middle,last, 
CONCAT(first,' ',middle,' ',last) AS fullname
FROM names a 
LEFT JOIN info b ON fullname = b.name
LIMIT 1

目前的错误是:ERROR 1054 (42S22): Unknown column 'fullname' in 'on clause'

4 个答案:

答案 0 :(得分:3)

您面临的问题是您正在尝试加入计算列。

您需要先在子选择中计算列,然后加入到'table'

这样的东西
SELECT  *
FROM    (
            SELECT  first,
                    middle,
                    last,  
                    CONCAT(first,' ',middle,' ',last) AS fullname 
            FROM    names 
        ) a  LEFT JOIN 
        info b  ON  fullname = b.name 
LIMIT 1 

您还可以查看中间空格的CASE Statement

答案 1 :(得分:1)

您不能在ON子句中使用别名。尝试做

SELECT first,middle,last,
CONCAT(first,' ',middle,' ',last) AS fullname
FROM names a 
LEFT JOIN info b ON b.name=CONCAT(first,' ',middle,' ',last) 

“与ON一起使用的conditional_expr是可以在WHERE子句中使用的表单的任何条件表达式”(来自dev.mysql.com/doc/refman/5.1/en/join.html)。

因此,作为逻辑推理,不允许在ON子句中使用别名。

答案 2 :(得分:0)

试试这个:

选择第一个,最后一个,CONCAT(第一个,'',中间,'',最后一个)作为完整名称,从左边的加入信息b开始(CONCAT(第一个,'',中间,'',最后一个)= b。名)

还有一件事,你在你的选择查询

中跳过了最后一个逗号

答案 3 :(得分:0)

试试这个,

SELECT CONCAT(first,'',middle,'',last)AS fullname FROM命名

LEFT JOIN info b

ON fullname = b.name

LIMIT 1