web-dev-qa-db-ja.com

MySQLでCoalesceを使用する方法

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

Google結果の_how to use coalsece_の1ページ目の結果のすべてのページを読みました。

私は、最初に出会ったnull以外の値を返し、そうでなければnullを返すという意味を知っています。

しかし、私にはまだあいまいです。

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

    はい、返されるのは最初のNULL以外の値のみです。あなたがそうではないと思った場所で見たクエリについて誤解する必要があります。例を示すことができれば、誤解を明確にすることができるかもしれません。

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

    引数の順に:この例では、column1column2

  3. または、imが間違っているか、構文が間違っている場合、どのように正しく書きますか?

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

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

    ドキュメント から取得:

    
    mysql> SELECT COALESCE(NULL,1);
            -> 1
    mysql> SELECT COALESCE(NULL,NULL,NULL);
            -> NULL
    
  5. そして、使用することが望ましい場合。

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

36
eggyal

優先リストの行で空白ではない最初の列を検索する場合、私は個人的に合体を使用します。

たとえば、顧客テーブルから電話番号を取得し、mobile、home、workという名前の電話番号用の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    |
------------------------------
26
crazeyez

COALESCEは、最初のNULL以外の列または値を返します。

使用例:

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

結果の例:

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

これは、NULLフィールド/列をNULLから0および1に変更する場合のCoalesceの完璧な例です。これをmysqlエディターにコピーすると、見栄えがよくなります。

「Column1(Dont Want Touched)」を選択し、coalesce(column2(nullの場合は0に設定する)、0)をcolumn2(たとえば「column2」と同じ名前にします)、coalesce(column3( 1)、1)column3として(たとえば "column3"と同じ名前を付けます)
from "MydataTable" Where 'somedates' in( '2015-04-10'、 '2015-04-03'、 '2015-03-27'、 '2015-04-17')and id = 「somedates」による10の順序。

0
Pec1983