1

データベースには、個人の名、ミドルネーム、姓を表す 3 つの列があります。

            People
|------------------------------------------|
| First_Name  |  Last_name    | Middle_name|
|------------------------------------------|
|  John       |  Hansen       |     T      |
|   NULL      |  Smith        |    NULL    |
|  Jacob      |    NULL       |     J      |
|  Michael    |  Johnson      |    NULL    |
|------------------------------------------|

nullセーフの姓、名+ミドルネームを取得する最良の方法は何ですか. 上記のリストから、次のようになります。

Hansen, John T
Smith
Jacob J
Johnson, Michael

これまでのところ、私は持っています:

select concat_ws(', ', name_last, concat_ws(' ', name_first, name_middle)) as name from entity;

,しかし、それは私が望んでいないところで私を引きずっています。

4

2 に答える 2

5

引数のいずれかが次の場合CONCATに返される事実を使用できます。NULLNULL

SELECT COALESCE(CONCAT(last_name, ', ', first_name), last_name, first_name)
FROM People

SQL フィドルのデモ


または、質問を編集して Middle_name 列を追加したので:

SELECT COALESCE(CONCAT(last_name, ', ', COALESCE(CONCAT(first_name, ' ', middle_name),first_name,middle_name)), 
                last_name, 
                COALESCE(CONCAT(first_name, ' ', middle_name),first_name,middle_name))
FROM People

SQL フィドルのデモ

于 2013-09-19T23:56:42.587 に答える