0

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

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

4 回答 4

3

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

您需要先计算子选择中的列,然后加入该“表”

就像是

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 语句。

于 2012-07-13T04:16:20.197 回答
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 子句中使用别名。

于 2012-07-13T04:19:03.717 回答
0

试试这个:

select first, last, CONCAT(first,' ',middle,' ',last) as fullNAME from names a left join info b on (CONCAT(first,' ',middle,' ',last) =b.name)

还有一件事,你在你的选择查询中最后跳过了一个逗号

于 2012-07-13T04:23:39.867 回答
0

试试这个 ,

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

左连接信息 b

ON 全名 = b.name

限制 1

于 2012-07-13T04:25:45.200 回答