Chúng ta có thể cập nhật một bảng nhờ INNER JOIN. Hãy tạo hai bảng để minh họa.
Tạo bảng đầu tiên
mysql> CREATE TABLE tblFirst (
-> id INT,
-> name VARCHAR(100)
-> );
Query OK, 0 rows affected (0.48 sec)
Chèn dữ liệu
mysql> INSERT INTO tblFirst VALUES(1,'John');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO tblFirst VALUES(2,'Bob');
Query OK, 1 row affected (0.26 sec)
mysql> INSERT INTO tblFirst VALUES(3,'David');
Query OK, 1 row affected (0.20 sec)
Hiển thị tất cả bản ghi
mysql> SELECT * FROM tblFirst;
Kết quả:
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | Bob |
| 3 | David |
+------+-------+
3 rows in set (0.00 sec)
Tạo bảng thứ hai
mysql> CREATE TABLE UpdTable (
-> IncId INT AUTO_INCREMENT,
-> PRIMARY KEY(IncId),
-> id INT,
-> name VARCHAR(100)
-> );
Query OK, 0 rows affected (0.57 sec)
Chèn dữ liệu
mysql> INSERT INTO UpdTable(id,name) VALUES(1,'Taylor');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO UpdTable(id,name) VALUES(2,'jason');
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO UpdTable(id,name) VALUES(3,'carol');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO UpdTable(id,name) VALUES(4,'john');
Query OK, 1 row affected (0.16 sec)
Hiển thị tất cả bản ghi
mysql> SELECT * FROM UpdTable;
Kết quả:
+-------+------+--------+
| IncId | id | name |
+-------+------+--------+
| 1 | 1 | Taylor |
| 2 | 2 | jason |
| 3 | 3 | carol |
| 4 | 4 | john |
+-------+------+--------+
4 rows in set (0.00 sec)
Quan sát kết quả: bản ghi cuối cùng có tên 'john' khớp với bảng đầu tiên. Viết truy vấn UPDATE:
mysql> UPDATE UpdTable
-> INNER JOIN tblFirst ON (UpdTable.name = tblFirst.name)
-> SET UpdTable.id = tblFirst.id;
Query OK, 1 row affected (0.19 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Bản ghi cuối đã được cập nhật. Kiểm tra lại:
mysql> SELECT * FROM UpdTable;
Kết quả:
+-------+------+--------+
| IncId | id | name |
+-------+------+--------+
| 1 | 1 | Taylor |
| 2 | 2 | jason |
| 3 | 3 | carol |
| 4 | 1 | john |
+-------+------+--------+
4 rows in set (0.00 sec)
Cột id của bản ghi cuối đã thay đổi từ 4 thành 1.