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

MySQL trả về gì nếu sub-query trong SET của UPDATE không trả về hàng nào?

Trong trường hợp này, MySQL sẽ cung cấp giá trị NULL cho mệnh đề SET. Ví dụ sau sẽ minh họa:

Ví dụ

mysql> SELECT * FROM student;
+----+---------+-----------+
| Id | Name    | grade     |
+----+---------+-----------+
| 1  | Rahul   | Good      |
| 2  | Gaurav  | Good      |
| 3  | Raman   | Excellent |
| 4  | Harshit | Average   |
| 5  | Aarav   | Best      |
| 6  | Ram     | average   |
+----+---------+-----------+
6 rows in set (0.00 sec)
mysql> SELECT * FROM info;
+------+-----------+
| id   | remarks   |
+------+-----------+
| 1    | Good      |
| 2    | Good      |
| 3    | Excellent |
| 4    | Average   |
| 5    | Best      |
+------+-----------+
5 rows in set (0.00 sec)

Từ hai bảng trên, ta thấy bảng 'student' có 6 hàng và giá trị 'grade' là 'average' ở id = 6, bảng 'info' có 5 hàng. Bây giờ sub-query trong truy vấn sau sẽ không cung cấp hàng nào để đưa giá trị mới vào mệnh đề SET, do đó nó sẽ chèn giá trị NULL. Điều này có thể kiểm tra từ đầu ra của các truy vấn sau:

mysql> UPDATE STUDENT SET grade = (SELECT remarks FROM info WHERE info.id = student.id) WHERE id = 6;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM student;
+----+---------+-----------+
| Id | Name    | grade     |
+----+---------+-----------+
| 1  | Rahul   | Good      |
| 2  | Gaurav  | Good      |
| 3  | Raman   | Excellent |
| 4  | Harshit | Average   |
| 5  | Aarav   | Best      |
| 6  | Ram     | NULL      |
+----+---------+-----------+
6 rows in set (0.00 sec)