MySQL में एक टेबल से दूसरी टेबल में डेटा कॉपी करने के लिए, जब कॉलम नाम या संरचना अलग हो, तो INSERT INTO ... SELECT स्टेटमेंट का उपयोग करें। यह कॉलम मैपिंग को स्पष्ट रूप से परिभाषित करने की अनुमति देता है।
उदाहरण: अलग कॉलम नामों के साथ डेटा कॉपी
स्रोत टेबल बनाएं (ऑटो-इन्क्रीमेंट प्राइमरी की के साथ):
mysql> CREATE TABLE DemoTable1900 (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(20),
ClientAge INT DEFAULT 29
) AUTO_INCREMENT = 1000;
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1900 (ClientName, ClientAge) VALUES
('Chris', 45),
('David', 29),
('Mike', 37),
('Sam', NULL); -- डिफ़ॉल्ट 29 उपयोग होगा
लक्ष्य टेबल बनाएं (अलग कॉलम नामों के साथ):
mysql> CREATE TABLE DemoTable1901 (
EmployeeId INT,
EmployeeName VARCHAR(20),
EmployeeAge INT
);
कॉलम मैपिंग के साथ डेटा कॉपी करें:
mysql> INSERT INTO DemoTable1901 (EmployeeId, EmployeeName, EmployeeAge) SELECT ClientId, ClientName, ClientAge FROM DemoTable1900;
परिणाम:
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 1000 | Chris | 45 | | 1001 | David | 29 | | 1002 | Mike | 37 | | 1003 | Sam | 29 | +------------+--------------+-------------+
मुख्य बिंदु
- कॉलम क्रम:
INSERT INTOऔरSELECTमें कॉलम का क्रम मेल खाना चाहिए। - स्पष्ट कॉलम सूची: हमेशा कॉलम नाम निर्दिष्ट करें ताकि भविष्य में स्कीमा परिवर्तन से क्वेरी न टूटे।
- डेटा प्रकार संगतता: स्रोत और लक्ष्य कॉलम के डेटा प्रकार संगत होने चाहिए।
- AUTO_INCREMENT: लक्ष्य टेबल में ऑटो-इन्क्रीमेंट नहीं है, इसलिए स्रोत ID कॉपी हो जाते हैं।
- डिफ़ॉल्ट मान: स्रोत में NULL होने पर डिफ़ॉल्ट मान (29) कॉपी होता है।
उन्नत उपयोग
आप SELECT में एक्सप्रेशन, फंक्शन, या स्थिर मान भी उपयोग कर सकते हैं:
INSERT INTO TargetTable (id, name, created_at, status) SELECT id, UPPER(name), NOW(), 'active' FROM SourceTable;
यह तरीका डेटा माइग्रेशन, आर्काइविंग, और रिपोर्टिंग टेबल बनाने के लिए आदर्श है।