Sử dụng subquery trong mệnh đề VALUES() của INSERT để lấy giá trị từ bảng khác.
Bảng nguồn (DemoTable1)
mysql> CREATE TABLE DemoTable1(Name VARCHAR(100), Score INT);
Query OK, 0 rows affected (1.30 sec)
mysql> INSERT INTO DemoTable1 VALUES
('Chris',45), ('Bob',78), ('David',98), ('Carol',89);
Query OK, 4 rows affected
Bảng đích (DemoTable2)
mysql> CREATE TABLE DemoTable2(StudentName VARCHAR(100), StudentScore INT); Query OK, 0 rows affected (0.58 sec)
Chèn 1 hàng dùng 2 subquery riêng biệt
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)
Kết quả:
+-------------+--------------+ | StudentName | StudentScore | +-------------+--------------+ | David | 98 | +-------------+--------------+
⚠️ Lưu ý quan trọng: Mỗi subquery phải trả về đúng 1 giá trị đơn lẻ (scalar). Nếu trả về 0 hoặc >1 hàng sẽ báo lỗi.
Cách viết phổ biến hơn: INSERT INTO DemoTable2 SELECT Name, Score FROM DemoTable1 WHERE Score = 98; (không cần VALUES, không cần subquery).