MySQLのCONCAT条件での選択


116

私はこれを私の心の中でコンパイルしようとしています。私は、firstnameとlastnameフィールドを持つテーブルを持っており、 "Bob Jones"や "Bob Michael Jones"などの文字列を持っています。

実は、私は例えばファーストネームにボブ、ラストネームにマイケルジョーンズを持っています

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

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

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

回答:


177

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

式を繰り返すこともできます。

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"

5
これは答えとして設定することでした。
Arun Killu 2013年

しばらくすると、私はこれをより良い答えとして使用することに同意することができます
Alex K

@Alex希望する場合は別の回答を選択できます
gypaetus 2013

1
多くの行があるかさばるテーブルの場合、「クエリのラップ」バージョンを使用するのは賢明ではないと思います。
ファンディ・スサント

34

これを試して:

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

私にとっては完璧に動作します。感謝します:)そしてコードにテキストを入力してくれてありがとう、忘れました
Alex K


8

CONCAT_WS()を使用します。

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

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


それでそれはそうあるべきですCONCAT_WS(' ', ..
アレックスK

7

試してください:

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

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


7

CONCAT式を繰り返したり、サブクエリを使用したりする方法は他にもあります。HAVING列のエイリアスを認識する句を使用できます。

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

これが動作しているSQL Fiddleです。


なぜhaving句が注目を集めないのかわからない。仮想列名を直接使用できます。having句にはより多くのオーバーヘッドがありますか?
Paul

クエリの実行の最後に適用される@Paul having句により、MAX()などの集計関数に条件を設定するために使用できます。句がインデックスを使用できないため、時間がかかります。
モスタファVatanpour 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.