2016-05-24 2 views
1

は、私はこのようなテーブルがあります。MySQLで行をマージするにはどうすればよいですか?

// colors 
+----+-------+--------+----------+---------+ 
| id | type | red_id | green_id | blue_id | 
+----+-------+--------+----------+---------+ 
| 1 | 1  | 51  | NULL  | NULL | 
| 2 | 3  | NULL | NULL  | 12  | 
| 3 | 1  | 423 | NULL  | NULL | 
| 4 | 2  | NULL | 5432  | NULL | 
| 5 | 2  | NULL | 10  | NULL | 
+----+-------+--------+----------+---------+ 
// ^type: there is either 1 or 2 or 3 which specifies which color isn't NULL 

をそして私はこの出力をしたい:

// new_colors 
+----+-------+----------+ 
| id | type | color_id | 
+----+-------+----------+ 
| 1 | 1  | 51  | 
| 2 | 3  | 12  | 
| 3 | 1  | 423  | 
| 4 | 2  | 5432  | 
| 5 | 2  | 10  | 
+----+-------+----------+ 

私はCASE .. WHEN機能を使用するために持っていると思います。

SELECT id, type, 
     CASE WHEN red_id IS NOT NULL THEN red_id 
       WHEN green_id IS NOT NULL THEN green_id 
       WHEN blut_id IS NOT NULL THEN blue_id 
     END AS color_id 
    FROM colors 
WHERE 1 

しかし、私はtype列に依存してクエリを書こうとしています。これらの3つの数字の1つをCASE .. WHENの代わりにtype列の、23に使用したいと思います。それは可能ですか?

答えて

4

*これにあなたのcase文を変更し 。 Coalesce関数は、この関数に渡された列のリストから最初の非NULL値をパラメータとして返します。

select id, type,coalesce(red_id,green_id,blue_id) as color_id from colors 
+0

TNXです....... .. +1 – Shafizadeh

1

はテストしていませんが、これは正しいようだ:あなたはMySQLでCOALESCE関数を使用したい

CASE WHEN type = 1 THEN red_id 
      WHEN type = 2 THEN green_id 
      WHEN type = 3 THEN blue_id 
    END AS color_id 
+0

TNX ......... 1を使用することができます – Shafizadeh

2

あなたは既に何をすべきかを知っています。 簡単な変更:

SELECT id, type, 
     CASE WHEN (type = 1) THEN red_id 
       WHEN (type = 2) THEN green_id 
       WHEN (type = 3) THEN blue_id 
     END AS color_id 
    FROM colors 
WHERE 1 
+0

Tnx ......... +1 – Shafizadeh

4

あなたのテーブルがbad designです。 type列の場合は、value列が必要です.3列ではありません。あなたのケースでは

、唯一の1列はnullない場合は、2 null、あなたは

SELECT id, type, 
    COALESCE(red_id, green_id, blue_id) 
FROM colors; 
+0

Tnx ......... +1 *(私の表構造設計についても良い点)* – Shafizadeh

関連する問題