Using Subquiries in Updates | 在UPDATES中用子查询 | MySQL

本文介绍了如何在SQLUPDATE语句中使用子查询处理不同场景,如单值匹配、多值匹配以及无需子查询但需筛选特定条件的情况。作者强调了执行更新前检查的重要性。
摘要由CSDN通过智能技术生成

Using Subquiries in Updates

和上一篇文章的情景一样,如果我们想更新所有用户id=3的发票信息,但是如果我们没有某客户的id而只有他的名字怎么办?
这是我们可以在UPDATE的选择语句中插入查询语句

案例一

USE sql_invoicing;
UPDATE invoices
SET 
	payment_total = invoice_total * 0.5,
	payment_date = due_date
WHERE client_id = 
	(
	SELECT client_id
	FROM clients
	WHERE name = 'Myworks'
	)

当前子查询语句返回的是单个值,因此我们可以用等号来连接子查询语句
在这里插入图片描述

案例二

当前子查询语句返回的是多个值,需要有所调整
例如,此时的查询语句:

SELECT client_id
FROM clients
WHERE state in ('CA','NY')

在这里插入图片描述
如果继续用=会报错
在这里插入图片描述

此时我们可以用IN来替代=号


```sql
USE sql_invoicing;
UPDATE invoices
SET 
	payment_total = invoice_total * 0.5,
	payment_date = due_date
WHERE client_id IN 
	(
	SELECT client_id
	FROM clients
	WHERE state in ('CA','NY')
	)

案例三

当然,及时没有子查询,我们也可以查询到会被更新的记录
假设需要更新所有付款日期为空值的发票

USE sql_invoicing;
UPDATE invoices
SET 
	payment_total = invoice_total * 0.5,
	payment_date = due_date
WHERE payment_date is NULL

不过需要养成好习惯,在执行更新前,最好先执行一下被更新的记录将会是哪些:
在这里插入图片描述
确认无误后在执行

练习

-- 给下过订单且积分>3000的客户增加评论
UPDATE orders
SET comments = 'Gold customer'
Where customer_id IN 
			(SELECT customer_id
			FROM customers
			WHERE points > 3000 )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值