Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เลือกค่าที่ไม่ซ้ำจาก 3 คอลัมน์ และรวมแสดงในคอลัมน์เดียวด้วย UNION ใน MySQL

ใช้ UNION (ไม่ซ้ำ) รวมค่าจากหลายคอลัมน์ แล้วกรอง NULL และจัดเรียง

mysql> CREATE TABLE DemoTable (
    -> Value1 INT,
    -> Value2 INT,
    -> Value3 INT
    -> );
Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO DemoTable VALUES(20, NULL, NULL);
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable VALUES(20, NULL, NULL);
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES(20, NULL, NULL);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES(10, NULL, NULL);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable VALUES(80, 20, 100);
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable VALUES(10, NULL, NULL);
Query OK, 1 row affected (0.16 sec)
mysql> SELECT * FROM DemoTable;
+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
|     20 |   NULL |   NULL |
|     20 |   NULL |   NULL |
|     20 |   NULL |   NULL |
|     10 |   NULL |   NULL |
|     80 |     20 |    100 |
|     10 |   NULL |   NULL |
+--------+--------+--------+
6 rows in set (0.00 sec)

รวมค่าจาก 3 คอลัมน์ แล้วเอาค่าที่ไม่ซ้ำและไม่ NULL:

mysql> SELECT * FROM (
    ->   SELECT Value1 AS AllValue FROM DemoTable
    ->   UNION
    ->   SELECT Value2 AS AllValue FROM DemoTable
    ->   UNION
    ->   SELECT Value3 AS AllValue FROM DemoTable
    -> ) tbl WHERE AllValue IS NOT NULL
    -> ORDER BY AllValue;
+----------+
| AllValue |
+----------+
|       10 |
|       20 |
|       80 |
|      100 |
+----------+
4 rows in set (0.00 sec)

ข้อแตกต่าง: UNION = Distinct (ไม่ซ้ำ), UNION ALL = รวมทั้งหมด (รวมซ้ำ) เร็วกว่า