📜  mysql 从另一个表更新一个表的多列 - SQL (1)

📅  最后修改于: 2023-12-03 15:17:47.327000             🧑  作者: Mango

MySQL 从另一个表更新一个表的多列

在实际的开发中,我们可能会遇到需要从一个表更新另一个表的多列的情况。MySQL 提供了 UPDATE 的语法可以实现这个功能。

UPDATE 语法
UPDATE table1
SET column1 = (SELECT columnA FROM table2 WHERE table2.id = table1.id),
    column2 = (SELECT columnB FROM table2 WHERE table2.id = table1.id),
    ...
WHERE condition;

以上是 UPDATE 的语法结构,可以通过子查询来实现从另一个表更新一个表的多列。

具体解释如下:

  • UPDATE:表示要更新的表名。
  • SET:表示要更新的列名和对应的值,多列需要使用逗号分隔。
  • column1column2...:表示要更新的列名。
  • (SELECT columnA FROM table2 WHERE table2.id = table1.id)(SELECT columnB FROM table2 WHERE table2.id = table1.id)...:表示子查询语句,用于从另一个表获取对应列的值。
  • table1table2:表示要更新的表和要获取数据的表。
  • WHERE:表示更新的条件,需要确保更新的数据与要更新的表的数据是对应的。
示例

假设有两张表 table1table2,它们的结构如下:

-- table1 表结构
CREATE TABLE table1 (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  age INT,
  salary FLOAT
);

-- table2 表结构
CREATE TABLE table2 (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  age INT,
  salary FLOAT
);

现在我们需要从 table2 表更新 table1 表的 nameagesalary 列,更新的条件是 id 列相同。

可以使用以下 SQL 语句实现:

UPDATE table1
SET name = (SELECT name FROM table2 WHERE table2.id = table1.id),
    age = (SELECT age FROM table2 WHERE table2.id = table1.id),
    salary = (SELECT salary FROM table2 WHERE table2.id = table1.id);
注意事项
  • 在使用 UPDATE 语法更新多列时,需要确保表之间存在关联关系,可以通过 JOIN 或者子查询方式实现。
  • 更新条件需要确保唯一性,否则会将多条数据都更新了,不符合预期。