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

MySQL CONCAT() का उपयोग करके क्वेरी में उपयोग के लिए कॉलम नाम कैसे बनाएं?


डायनामिक SQL: यूजर-डिफाइंड वेरिएबल + PREPARE/EXECUTE

रनटाइम पर कॉलम नामों की सूची बनाकर एक क्वेरी बनाने के लिए, INFORMATION_SCHEMA.COLUMNS, GROUP_CONCAT, CONCAT, और तैयार स्टेटमेंट (PREPARE, EXECUTE, DEALLOCATE PREPARE) का उपयोग करें।

चरण-दर-चरण प्रक्रिया

  1. कॉलम नामों की सूची बनाएं एक यूजर-डिफाइंड वेरिएबल में।
  2. तैयार करें PREPARE के साथ।
  3. निष्पादित करें EXECUTE के साथ।
  4. मुक्त करें DEALLOCATE PREPARE के साथ।

सिंटैक्स

-- 1. क्वेरी स्ट्रिंग बनाएं
SET @q := (
    SELECT CONCAT(
        'SELECT ',
        GROUP_CONCAT(CONCAT('1 AS ', COLUMN_NAME) SEPARATOR ', '),
        ' FROM DUAL'
    )
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'yourTableName'
);

-- 2. तैयार करें
PREPARE stmt FROM @q;

-- 3. निष्पादित करें
EXECUTE stmt;

-- 4. मुक्त करें
DEALLOCATE PREPARE stmt;

व्यावहारिक उदाहरण

टेबल बनाना

mysql> CREATE TABLE ConcatenationWithUserDefinedVariable (
    Id INT NOT NULL AUTO_INCREMENT,
    User_Id INT,
    PRIMARY KEY(Id)
);

क्वेरी स्ट्रिंग बनाना

mysql> SET @q := (
    SELECT CONCAT(
        'SELECT ',
        GROUP_CONCAT(CONCAT('1 AS ', COLUMN_NAME) SEPARATOR ', '),
        ' FROM DUAL'
    )
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'ConcatenationWithUserDefinedVariable'
);

तैयार करना और निष्पादित करना

mysql> PREPARE stmt FROM @q;
mysql> EXECUTE stmt;
+----+---------+
| Id | User_Id |
+----+---------+
|  1 |       1 |
+----+---------+

मुक्त करना

mysql> DEALLOCATE PREPARE stmt;

व्याख्या

  • INFORMATION_SCHEMA.COLUMNS — मेटाडेटा से कॉलम नाम प्राप्त करता है।
  • CONCAT('1 AS ', COLUMN_NAME) — प्रत्येक कॉलम के लिए 1 AS ColName बनाता है।
  • GROUP_CONCAT(... SEPARATOR ', ') — सभी को कॉमा से जोड़ता है।
  • PREPARE/EXECUTE — डायनामिक SQL निष्पादन।

उपयोग के मामले

  • डायनामिक पिवट/क्रॉसटैब क्वेरी बनाना।
  • रनटाइम पर निर्धारित कॉलम के साथ SELECT बनाना।
  • मेटाडेटा-चालित कोड जनरेशन।

सुरक्षा चेतावनी

डायनामिक SQL इंजेक्शन के प्रति संवेदनशील है। कभी भी अविश्वसनीय इनपुट को सीधे क्वेरी स्ट्रिंग में न जोड़ें। मानों के लिए प्लेसहोल्डर (?) के साथ PREPARE उपयोग करें।

  1. - MySQL में GROUP BY और COUNT() का उपयोग करके नामों द्वारा ग्रुप करके काउंट नए कॉलम में प्रदर्शित करना

    GROUP BY और COUNT() के साथ नामवार पंक्ति गिनती नाम के अनुसार रिकॉर्ड्स ग्रुप करके प्रत्येक नाम की घटनाओं को नए कॉलम में गिनने के लिए GROUP BY के साथ COUNT() का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> CREATE TABLE DemoTable ( Name VARCHAR(30) ); रिकॉर्ड्स इन्सर्ट करें: mysql> INSERT

  1. - MySQL में एक क्वेरी में सभी कॉलम नामों के लिए उपनाम (alias) कैसे सेट करें

    सिंटैक्स SELECT yourColumnName1 AS aliasName1, yourColumnName2 AS aliasName2 FROM yourTableName AS tableAlias; उदाहरण टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2014 VALUES (Chris, Brown); उपनाम के साथ क्वेरी FROM DemoTable2014 tbl; परिणाम +------------------+-----------------+ | Studen

  1. - MySQL सीक्वेंस कैसे बनाएं?

    MySQL में सीक्वेंस क्या है? MySQL में, एक सीक्वेंस इंटीजर्स की एक सूची को संदर्भित करता है जो आरोही क्रम में 1 से शुरू होकर या 0 से यदि निर्दिष्ट किया गया हो, उत्पन्न होती है। कई एप्लिकेशन को सीक्वेंस की आवश्यकता होती है जिनका उपयोग विशेष रूप से पहचान के लिए अद्वितीय संख्या उत्पन्न करने के लिए किया