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

Cách cập nhật bảng MySQL với giá trị từ bảng khác?

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.