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

これを試して:

first, last, CONCAT(first,' ',middle,' ',last) を名前から fullNAME として選択 a left join info b on (CONCAT(first,' ',middle,' ',last) =b.name)

もう1つ、選択クエリの最後にあるコンマをスキップしました

于 2012-07-13T04:23:39.867 に答える
0

これを試して 、

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

LEFT JOIN 情報 b

ON fullname = b.name

リミット 1

于 2012-07-13T04:25:45.200 に答える