Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chèn dữ liệu từ bảng này sang bảng khác dùng 2 subquery trong 1 truy vấn MySQL

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).