web-dev-qa-db-ja.com

MySQLはCONCAT条件で選択します

私はこれを自分の心でコンパイルしようとしています.firstnameとlastnameフィールドを持つテーブルがあり、「Bob Jones」や「Bob Michael Jones」などの文字列があります。

問題は、たとえば、ファーストネームにボブ、ラストネームにマイケル・ジョーンズがいる

だから私はしようとしている

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

しかし、不明な列「firstlast」と表示されます。

107
Alex K

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

式を繰り返すことができます:

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"
168
mdma

これを試して:

SELECT * 
  FROM  (
        SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
        FROM users 
    ) a
WHERE firstlast = "Bob Michael Jones"
34
Chandu
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
10
Jeff Swensen

CONCAT_WS()を使用します。

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

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

8
Viraj Dhamal

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

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

動作する SQL Fiddle です。

7
Bogdan

試してください:

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

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

7
RC.