Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में UNION का उपयोग करके तीन कॉलम्स से विशिष्ट मानों को एक कॉलम में संयोजित करें

MySQL में UNION का उपयोग करके कई कॉलम्स को एक कॉलम में संयोजित करना

जब आपको एक ही टेबल के कई कॉलम्स से विशिष्ट (DISTINCT) मानों को एक ही परिणाम कॉलम में संयोजित करने की आवश्यकता होती है, तो UNION (या UNION ALL) का उपयोग करें।

टेबल बनाना

mysql> CREATE TABLE DemoTable (
    -> Value1 INT,
    -> Value2 INT,
    -> Value3 INT
    -> );
Query OK, 0 rows affected (0.69 sec)

डेटा डालना (NULL मानों के साथ)

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)

तीनों कॉलम्स से विशिष्ट मानों को एक कॉलम में संयोजित करने का क्वेरी

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)

चरण-दर-चरण व्याख्या

  1. प्रत्येक SELECT: प्रत्येक कॉलम से मान चुनता है (NULL सहित)
  2. UNION: परिणामों को संयोजित करता है और डुप्लिकेट हटाता है (UNION ALL डुप्लिकेट रखता है)
  3. उपक्वेरी (tbl): संयुक्त परिणाम को एक व्युत्पन्न टेबल के रूप में मानता है
  4. WHERE AllValue IS NOT NULL: NULL मानों को फ़िल्टर करता है
  5. ORDER BY AllValue: अंतिम परिणाम को क्रमबद्ध करता है

UNION vs UNION ALL

ऑपरेटरडुप्लिकेटप्रदर्शनउपयोग करें जब
UNIONहटाता हैधीमा (सॉर्ट/हैश आवश्यक)अद्वितीय मान चाहिए
UNION ALLरखता हैतेज़सभी मान चाहिए, प्रदर्शन महत्वपूर्ण

बेहतर प्रदर्शन के लिए विकल्प (MySQL 8.0+)

-- VALUES ROW कंस्ट्रक्टर का उपयोग (यदि स्थिर मान)
SELECT DISTINCT val FROM (
    SELECT Value1 AS val FROM DemoTable
    UNION ALL SELECT Value2 FROM DemoTable
    UNION ALL SELECT Value3 FROM DemoTable
) t WHERE val IS NOT NULL ORDER BY val;

JSON दृष्टिकोण (MySQL 5.7+, लचीला)

SELECT DISTINCT 
    JSON_EXTRACT(j, '$[*]') AS val
FROM (
    SELECT JSON_ARRAY(Value1, Value2, Value3) AS j FROM DemoTable
) t
WHERE val IS NOT NULL;

सामान्य उपयोग मामले

  • एकाधिक फोन/ईमेल कॉलम्स से विशिष्ट संपर्क जानकारी प्राप्त करना
  • एकाधिक श्रेणी कॉलम्स से सभी श्रेणियाँ प्राप्त करना
  • एकाधिक टैग कॉलम्स से सभी टैग प्राप्त करना
  • ETL प्रक्रियाओं में डेटा सामान्यीकरण

NULL संचालन नोट

UNION NULL मानों को समान मानता है (एक NULL दूसरे NULL के बराबर), इसलिए कई NULL एक एकल NULL में विलीन हो जाएंगे। बाहरी WHERE क्लॉज फिर उस एकल NULL को हटा देता है।

  1. - MySQL में GROUP_CONCAT और CONCAT के साथ DISTINCT का उपयोग करके एकल कॉलम के मानों को कोट कैसे करें?

    इसके लिए, आप replace() के साथ group_concat() का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1799 ( EmployeeId varchar(20) ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1799 values

  1. - MySQL में NULL और NOT NULL रिकॉर्ड वाले कॉलम से केवल NOT NULL मान प्रदर्शित करें

    इसके लिए आप IS NOT NULL प्रॉपर्टी का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1 values(2019-09-10); Query OK, 1 r

  1. - MySQL में SUBSTRING_INDEX का उपयोग करके हाइफ़न से अलग स्ट्रिंग को कई कॉलम्स में विभाजित करें

    MySQL में SUBSTRING_INDEX का उपयोग करके विभाजक द्वारा स्ट्रिंग पार्सिंग MySQL का SUBSTRING_INDEX() फ़ंक्शन एक स्ट्रिंग को विभाजक द्वारा विभाजित करने और विशिष्ट भाग निकालने के लिए अत्यंत उपयोगी है। यह CSV-शैली डेटा या संयुक्त फ़ील्ड्स को पार्स करने के लिए आदर्श है। टेबल बनाना ); Query OK, 0 rows af