执行此查询的正确方法是什么?另外,我想从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'
答案 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