如果 UPDATE 語句的 SET 子句中用於指定新值的子查詢未返回任何行,MySQL 將返回什麼?


在這種情況下,MySQL將向 SET 子句提供一個 NULL 值。以下示例將演示它−

示例

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)

從上述兩張表中,我們可以看到“學生”表中有6行,並且在 id = 6 的情況下,“成績”的值為“平均”,而“資訊”表中有5行。現在,在以下查詢中使用的子查詢將不會提供任何行來在 SET 子句中提供新值,因此它將插入一個 NULL 值。可以從以下查詢的輸出中檢查它−

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)

更新於:2020-06-20

117 閱讀

開啟你的 職業生涯

完成課程以獲得認證

開始吧
廣告
© . All rights reserved.