117

私はこれを頭の中でコンパイルしようとしています。私は名と姓のフィールドを持つテーブルを持っており、「BobJones」や「BobMichaelJones」などの文字列を持っています。

たとえば、ファーストネームにボブ、ラストネームにマイケルジョーンズがいます。

だから私はしようとしています

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
 WHERE firstlast = "Bob Michael Jones"

しかし、それは未知の列「最初の最後」を言います..誰か助けてくれませんか?

4

6 に答える 6

180

指定するエイリアスは、クエリの出力用です。クエリ自体では使用できません。

次の式を繰り返すことができます。

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
FROM users
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"

またはクエリをラップします

SELECT * FROM (
  SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users) base 
WHERE firstLast = "Bob Michael Jones"
于 2011-04-20T18:02:08.780 に答える
34

これを試して:

SELECT * 
  FROM  (
        SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
        FROM users 
    ) a
WHERE firstlast = "Bob Michael Jones"
于 2011-04-20T18:00:17.827 に答える
10
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
于 2011-04-20T17:59:55.860 に答える
8

CONCAT_WS()を使用します。

SELECT CONCAT_WS(' ',firstname,lastname) as firstlast FROM users 
WHERE firstlast = "Bob Michael Jones";

最初の引数は、残りの引数の区切り文字です。

于 2014-01-20T10:37:55.193 に答える
7

試す:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"

副選択としてクエリを実行しない限り、エイリアスfirstlastはクエリのwhere句で使用できません。

于 2011-04-20T18:00:15.423 に答える
7

式を繰り返すCONCATか、サブクエリを使用する代わりの方法があります。HAVING列のエイリアスを認識する句を利用できます。

SELECT 
  neededfield, CONCAT(firstname, ' ', lastname) AS firstlast 
FROM
  users 
HAVING firstlast = "Bob Michael Jones"

これが動作するSQLフィドルです。

于 2014-01-10T14:32:37.353 に答える