什么是多表关联更新?

在一个执行SQL的UPDATE 语句中,基于另一个表或多个表中的数据,来更新目标表中的数据称之为多表关联更新。

很难理解?

想象一下,你有一个 orders 表(订单表)和一个 customers 表(客户表)。现在需要将所有来自“上海”的客户的订单状态更新为“优先处理”。如果没有多表关联更新,你可能需要:

1.先执行一个 SELECT 查询,找出所有上海客户的ID。

2.再根据这些ID,执行一个 UPDATE 语句去更新 orders 表。

3.而使用多表关联更新,只需一条SQL语句即可完成。

而现在我们有多表关联更新了,只要一条SQL语句即可完成!

怎么操作?

准备一张orders表,字段包括id(身份码)、address(收货地)

再准备一张customers表,包括id(身份码)、 name(姓名)、degree(优先级)

然后自行补充5条信息:

订单表和客户表

回到刚才那个问题,

如何更改所有来自“上海”的客户的订单状态更新为“优先处理”?

方法1:INNER JOIN

UPDATE orders o
JOIN customers c ON o.id = c.id  
SET o.degree = '高'         
WHERE c.address = '上海';

完成需求:

id=2的订单已更新优先级为高


方法2:UPDATE

UPDATE orders o, customers c
SET o.degree = '高'
WHERE o.id = c.id          
AND c.address = '上海';


方法3:

LEFT JOIN
UPDATE orders o
LEFT JOIN customers c ON o.id = c.id
SET o.degree = '高'
WHERE c.address = '上海';


方法4:子查询

UPDATE orders
SET degree = '高'
WHERE id IN (
    SELECT id 
    FROM customers 
    WHERE address = '上海'
);
点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)