mysql update 如何写子查询
当使用mysql条件更新时--最先让人想到的写法
UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT uid FROM seller)
此语句是错误的,会报错 You can't specify target table 'xxx' for update in FROM
这是因为:
mysql的update的一些特点
1、update 时,更新的表不能在set和where中用于子查询;
2、update 时,可以对多个表进行更新(sqlserver不行);
如:update ta a,tb b set a.Bid=b.id ,b.Aid=a.id;
3、update 后面可以做任意的查询,这个作用等同于from;
正确的方式是,例:
简单的更新:
UPDATE roles_permissions
a SET a.roles_id=89 WHERE a.roles_name
='0|||管理员'
较为复杂的更新:
例1:
UPDATE order_mall a,(SELECT order_mall.id FROM order_mall
,order_goods
WHERE order_mall.id
=order_goods.order_id
AND order_goods.order_status=8 AND order_goods.order_goods_type=3) b
SET a.status
=4
WHERE a.id=b.id
例2:
UPDATE core_user
a,(SELECT message_push_conf.user_id,message_push_conf.open_push
FROM message_push_conf
) b
SET a.switch_push
=b.open_push
WHERE a.id=b.user_id
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理