2013-06-14 16 views
25

ここで少し助けてください。私は本当にMySQLでこの合体を使用する方法を理解していませんCoalesce in MySQLの使い方

私はhow to use coalseceの1ページの結果のすべてのページをGoogleの結果で読んだことがあります。

私はそれが遭遇した最初の非null値を返すという意味を知っています。

しかし、それはまだ私にとっては漠然としています。

  1. どうして私は複数の値を返すクエリを見たことがありますか?返される最初のnull値ではありませんか?
  2. そして、どの列を基に決定するのですか? coalesce(column1,column2)?最初の列がnullで、他の列がnullでない場合はどうなりますか?
  3. もし私が間違っていたり、構文が間違っていたら、どうすれば正しく書いていいですか?
  4. 誰かがそれを使用する方法について非常に良い簡単な例を提供できますか?
  5. また、使用することが望ましい場合。
+0

は 'COALESCE()'単一の値のみを返します。これに反する具体的な例がある場合は、質問を更新してください。 – fenway

答えて

30
  1. は、どのように私は複数の値を返すクエリを見に来ますか?それは返されない最初のヌル値ではありませんか?

    はい、NULL以外の最初の値だけが返されます。あなたは、そうではないと思ったところで見たクエリについて間違っていなければなりません:私たちに例を示すことができれば、誤解を明確にするのに役立つかもしれません。

  2. どのようにしてベースにするのですか?合体(列1、列2)?最初の列がnullで、他の列がnullでない場合はどうなりますか?

    引数の順に:この例では、column1より前には、column2です。

  3. また、間違っていたり、構文が間違っている場合は、正しく書き込むにはどうすればよいですか?

    あなたは間違っていません。

  4. 誰かがそれを使用する方法について非常に良い簡単な例を提供できますか?

    
    mysql> SELECT COALESCE(NULL,1); 
         -> 1 
    mysql> SELECT COALESCE(NULL,NULL,NULL); 
         -> NULL 
    
  5. そして、使用することが望ましい:the documentationから撮影

    リストからNULL以外の最初の値を選択する場合は、常に使用することが望ましいです。

+2

さらに答えてください(5) - LEFT JOINを使用すると非常に役立ちます。 – fenway

+0

@fenway:実装しようとしているロジックに依存します。私が書いたほとんどのLEFT JOINは 'COALESCE()'を使用していません。 – eggyal

+0

ああ、別の質問を忘れてしまった。私は何千ものレコードで最初のnullでないものだけを検索したいのですか? –

0

あなたは彼らがそれを見ていきますMySQLのエディタに0と1のコピーこれまでヌルからケースになりたいものにヌルフィールド/列を変更する場合はこれが合体の完璧な例です(列2(同じ場合は "column2"と同じ名前を付けます)、合体(column3(0の場合は0に設定)、0の場合はcolumn2 ( '2015-04-10'、 '2015-04-10'、 '2015-04-10'の 'MedataTable'からの
からの) 03 '、' 2015-03-27 '、' 2015-04-17 ')、id = 10 order by' somedates '

15

プライオリティリストから行の中で空でない最初の列を検索するときに、私は個人的に合体を使用します。

たとえば、私は顧客のテーブルから電話番号を取得したいと思いますが、モバイル、自宅、仕事の3つの列がありますが、空でない最初の番号のみを取得します。

この例では、私はモバイルの優先順位を持っていますし、家に帰ってから仕事をします。

TABLE STRUCTURE 
-------------------------------------------- 
| id | customername | mobile | home | work | 
-------------------------------------------- 
| 1 | Joe   | 123 | 456 | 789 | 
-------------------------------------------- 
| 2 | Jane   |  | 654 | 987 | 
-------------------------------------------- 
| 3 | John   |  |  | 321 | 
-------------------------------------------- 

SELECT id, customername, COALESCE(mobile, home, work) AS phone FROM customers 

RESULT 
------------------------------ 
| id | customername | phone | 
------------------------------ 
| 1 | Joe   | 123 | 
------------------------------ 
| 2 | Jane   | 654 | 
------------------------------ 
| 3 | John   | 321 | 
------------------------------ 
1

COALESCEは、最初の非ヌル列または値を返します。

使用例:

SELECT COALESCE(my_column, my_other_column, 'default') as username FROM my_table; 

例の結果: - あなたが述べたように、最初の非NULL値

my_column my_other_column  results 
null  null    'default' 
null  0     '0' 
null  'jimmy'    'jimmy' 
'bob'  'jimmy'    'bob'