40

ここで少し助けてください。MySQLでこの合体を使用する方法が本当にわかりません

how to use coalseceGoogleの結果のページ1の結果のすべてのページを読みました。

最初に遭遇したnull以外の値を返し、それ以外の場合はnullを返すという意味を知っています。

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

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

4 に答える 4

38

個人的には、優先度リストから連続して空白でない最初の列を見つけたいときに、coalesce を使用します。

たとえば、顧客テーブルから電話番号を取得したいとします。携帯電話、自宅、職場という名前の電話番号の 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    |
------------------------------
于 2017-02-03T11:19:41.627 に答える
0

これは、フィールド/列を希望するものに変更Coalesceする ifの完璧な例です。nullnull01

これをmysqlエディターにコピーすると、見栄えが良くなります

Select "Column1 (Dont Want Touched)", 
  coalesce(column2(That you want set to 0 if null), 0) as column2 /* (give it same name as was e.g. "column2") */, 
  coalesce(column3(Instead of null set to 1) ,1) as column3 /* (give it same name as was e.g. "column3") */ 
from "MydataTable" 
Where 'somedates' in ('2015-04-10', '2015-04-03', '2015-03-27', '2015-04-17')  and id = 10 order by 'somedates';
于 2015-04-21T09:21:03.813 に答える