私はこれを自分の心でコンパイルしようとしています.firstnameとlastnameフィールドを持つテーブルがあり、「Bob Jones」や「Bob Michael Jones」などの文字列があります。
問題は、たとえば、ファーストネームにボブ、ラストネームにマイケル・ジョーンズがいる
だから私はしようとしている
SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast
FROM users
WHERE firstlast = "Bob Michael Jones"
しかし、不明な列「firstlast」と表示されます。
指定するエイリアスは、クエリの出力用です-クエリ自体では使用できません。
式を繰り返すことができます:
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"
これを試して:
SELECT *
FROM (
SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast
FROM users
) a
WHERE firstlast = "Bob Michael Jones"
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast
FROM users
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
CONCAT_WS()を使用します。
SELECT CONCAT_WS(' ',firstname,lastname) as firstlast FROM users
WHERE firstlast = "Bob Michael Jones";
最初の引数は、残りの引数の区切り文字です。
CONCAT
式を繰り返すか、サブクエリを使用する代わりの方法があります。列のエイリアスを認識するHAVING
句を使用できます。
SELECT
neededfield, CONCAT(firstname, ' ', lastname) AS firstlast
FROM
users
HAVING firstlast = "Bob Michael Jones"
動作する SQL Fiddle です。
試してください:
SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast
FROM users
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
クエリを副選択として実行しない限り、エイリアスfirstlastはクエリのwhere句で使用できません。