यूजर-डिफाइंड वेरिएबल के साथ इनक्रीमेंटल मानों को कन्कैटिनेट करना
कॉलम के सभी मानों को John1, John2, आदि में अपडेट करने के लिए, आपको इनक्रीमेंटल मान 1, 2, 3 सेट करने होंगे और उन्हें रिकॉर्ड्स के साथ कन्कैटिनेट करना होगा।
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
StudentId VARCHAR(80)
);
समान नामों के साथ रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable VALUES ('John');
mysql> INSERT INTO DemoTable VALUES ('John');
mysql> INSERT INTO DemoTable VALUES ('John');
mysql> INSERT INTO DemoTable VALUES ('John');
mysql> INSERT INTO DemoTable VALUES ('John');
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-----------+ | StudentId | +-----------+ | John | | John | | John | | John | | John | +-----------+
सभी नामों को न्यूमेरिक इनक्रीमेंटल मानों के साथ अपडेट/कन्कैटिनेट करने के लिए क्वेरी:
mysql> UPDATE DemoTable, (SELECT @row := 0) r
SET StudentId = CONCAT('John', @row := @row + 1);
आउटपुट: Query OK, 5 rows affected
टेबल रिकॉर्ड्स फिर से जांचें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-----------+ | StudentId | +-----------+ | John1 | | John2 | | John3 | | John4 | | John5 | +-----------+
व्याख्या:
(SELECT @row := 0) rएक डिराइव्ड टेबल बनाता है जो वेरिएबल@rowको 0 से इनिशियलाइज़ करता है@row := @row + 1प्रत्येक पंक्ति के लिए वेरिएबल को इन्क्रीमेंट करता है और नया मान लौटाता हैCONCAT('John', ...)'John' को इन्क्रीमेंटेड नंबर के साथ जोड़ता है- काम करने के लिए MySQL को मल्टी-टेबल UPDATE सिंटैक्स की आवश्यकता होती है
नोट: पंक्तियों का क्रम गारंटीड नहीं है जब तक कि ORDER BY का उपयोग न किया जाए। विशिष्ट क्रम के लिए:
UPDATE DemoTable, (SELECT @row := 0) r
SET StudentId = CONCAT('John', @row := @row + 1)
ORDER BY StudentId;