MySQL INSERT INTO SELECT: एक टेबल के एग्रीगेट मान को दूसरी टेबल में डालना
INSERT INTO ... SELECT सिंटैक्स का उपयोग करके आप एक टेबल से डेटा चुनकर सीधे दूसरी टेबल में डाल सकते हैं। इसमें सबक्वेरी का उपयोग करके एग्रीगेट मान (जैसे MAX) भी शामिल कर सकते हैं।
उदाहरण: DemoTable1 के अधिकतम ID को DemoTable2 के सभी रिकॉर्ड में डालें
पहली टेबल:
CREATE TABLE DemoTable1 (Id INT, Name VARCHAR(100)); INSERT INTO DemoTable1 VALUES (1001, 'Chris'), (999, 'Robert'), (1003, 'Mike'), (1002, 'Sam');
दूसरी टेबल:
CREATE TABLE DemoTable2 (StudentId INT, StudentFirstName VARCHAR(100));
सबक्वेरी के साथ INSERT INTO SELECT
INSERT INTO DemoTable2 (StudentId, StudentFirstName) SELECT (SELECT MAX(Id) FROM DemoTable1), Name FROM DemoTable1;
परिणाम — DemoTable2:
+-----------+------------------+ | StudentId | StudentFirstName | +-----------+------------------+ | 1003 | Chris | | 1003 | Robert | | 1003 | Mike | | 1003 | Sam | +-----------+------------------+
व्याख्या
(SELECT MAX(Id) FROM DemoTable1)— सबक्वेरी जो एकल मान (1003) लौटाती है- यह मान DemoTable1 की प्रत्येक पंक्ति के लिए
StudentIdकॉलम में डाला जाता है Nameकॉलम DemoTable1 से सीधे लिया जाता है
महत्वपूर्ण: सबक्वेरी एकल मान लौटनी चाहिए
यदि सबक्वेरी एक से अधिक पंक्ति लौटाती है, तो त्रुटि होगी: Subquery returns more than 1 row।
वैकल्पिक: CROSS JOIN का उपयोग
INSERT INTO DemoTable2 (StudentId, StudentFirstName) SELECT m.MaxId, d.Name FROM DemoTable1 d CROSS JOIN (SELECT MAX(Id) AS MaxId FROM DemoTable1) m;
यह अधिक स्पष्ट और कभी-कभी अधिक कुशल होता है।
उपयोग केस
- बैच प्रोसेसिंग में रन ID/बैच ID सभी रिकॉर्ड में डालना
- ऑडिट टेबल में अधिकतम ट्रांजैक्शन ID कॉपी करना
- रेफरेंस मान को कई पंक्तियों पर लागू करना