2016-05-24 24 views
1

Ich habe eine Tabelle wie folgt aus:Wie füge ich Zeilen in MySQL zusammen?

// 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 

Und ich möchte diese Ausgabe:

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

Ich glaube, ich CASE .. WHEN Funktion verwenden.

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 

Aber ich versuche, eine Abfrage zu schreiben, hängt von der type Spalte. Ich möchte eine dieser drei Zahlen 1, 2, 3 in der Spalte type statt dieser CASE .. WHEN verwenden. Ist das möglich?

Antwort

4

Sie wollen COALESCE-Funktion in MySQL verwenden. Die Coalesce-Funktion gibt den ersten Nicht-Null-Wert aus der Liste der Spalten zurück, die als Parameter an diese Funktion übergeben wurden.

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

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

1

nicht getestet haben, aber dies scheint recht: * auf dies der Fall Aussage ändern

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 verwenden ......... +1 – Shafizadeh

2

Sie wissen bereits, was zu tun ist. Eine einfache Änderung:

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

Ihr Tisch ist bad design. Wenn Sie type Spalte haben, benötigen Sie nur die value Spalte, nicht 3 Spalten so.

Für Ihren Fall, wenn nur 1 Spalte nicht null ist, 2 null dann könnte man

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

Tnx ......... +1 * (auch ein guter Punkt über meine Tabelle Struktur Design) * – Shafizadeh

Verwandte Themen