দুটি আলাদা SELECT সাবকোয়েরি ব্যবহার করে এক টেবিল থেকে নির্দিষ্ট ডেটা অন্য টেবিলে ইনসার্ট করা যায়। এটি একক কোয়েরিতে সম্ভব।
প্রথম টেবিল তৈরি ও ডেটা
mysql> CREATE TABLE DemoTable1 (Name VARCHAR(100), Score INT); Query OK, 0 rows affected (1.30 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Chris', 45);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Bob', 78);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1 VALUES ('David', 98);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1 VALUES ('Carol', 89);
Query OK, 1 row affected (0.15 sec)
দ্বিতীয় টেবিল তৈরি
mysql> CREATE TABLE DemoTable2 (StudentName VARCHAR(100), StudentScore INT); Query OK, 0 rows affected (0.58 sec)
সাবকোয়েরি দিয়ে ইনসার্ট (দুটি SELECT)
mysql> INSERT INTO DemoTable2(StudentName, StudentScore)
VALUES (
(SELECT Name FROM DemoTable1 WHERE Score = 98),
(SELECT Score FROM DemoTable1 WHERE Name = 'David')
);
Query OK, 1 row affected (0.30 sec)
ফলাফল
mysql> SELECT * FROM DemoTable2;
আউটপুট:
+-------------+--------------+ | StudentName | StudentScore | +-------------+--------------+ | David | 98 | +-------------+--------------+ 1 row in set (0.00 sec)
ব্যাখ্যা
- প্রথম সাবকোয়েরি:
Score=98হলে 'David' রিটার্ন করে। - দ্বিতীয় সাবকোয়েরি:
Name='David'হলে 98 রিটার্ন করে। - প্রতিটি সাবকোয়েরি একক মান (স্ক্যালার) রিটার্ন করতে হবে।
সতর্কতা
- সাবকোয়েরি একাধিক রো রিটার্ন করলে এরর হবে (
Subquery returns more than 1 row)। - কোনো রো না পেলে NULL ইনসার্ট হবে (কলাম NOT NULL না হলে)।
- বेहতর:
INSERT INTO DemoTable2 SELECT Name, Score FROM DemoTable1 WHERE Score=98;(সিংগেল SELECT, একাধিক রো হ্যান্ডেল করে)।