当前位置: 首页 > news >正文

SQL 使用 UPDATE FROM 语法进行更新

UPDATE FROM 是一种常见的 SQL 语法模式,允许你基于其他表的数据来更新目标表。这种语法在不同数据库系统中有所不同,下面我将介绍几种主要数据库的实现方式。


PostgreSQL/SQL Server 语法

UPDATE target_table
SET target_column = source_table.source_column
FROM source_table
WHERE target_table.join_key = source_table.join_key
AND source_table.condition = true;

示例

-- 更新员工工资为对应部门平均工资的110%
UPDATE employees e
SET salary = d.avg_salary * 1.10
FROM (SELECT department_id, AVG(salary) as avg_salary FROM employees GROUP BY department_id
) d
WHERE e.department_id = d.department_id;

MySQL 语法

UPDATE target_table t
JOIN source_table s ON t.join_key = s.join_key
SET t.target_column = s.source_column
WHERE s.condition = true;

示例

-- 更新产品价格为供应商建议价格的95%
UPDATE products p
JOIN suppliers s ON p.supplier_id = s.supplier_id
SET p.price = s.suggested_price * 0.95
WHERE s.is_preferred = 1;

Oracle 语法

UPDATE (SELECT t.target_column, s.source_columnFROM target_table t, source_table sWHERE t.join_key = s.join_keyAND s.condition = true
)
SET target_column = source_column;

示例

-- 更新客户等级基于最近订单金额
UPDATE (SELECT c.customer_level, o.order_totalFROM customers c, orders oWHERE c.customer_id = o.customer_idAND o.order_date > ADD_MONTHS(SYSDATE, -3)
)
SET customer_level = CASE WHEN order_total > 1000 THEN 'GOLD'WHEN order_total > 500 THEN 'SILVER'ELSE 'STANDARD'END;

SQLite 语法

UPDATE target_table
SET target_column = (SELECT source_column FROM source_table WHERE join_condition
)
WHERE exists_condition;

示例

-- 更新库存数量为最新进货记录的数量
UPDATE inventory
SET quantity = (SELECT quantity FROM latest_deliveriesWHERE inventory.product_id = latest_deliveries.product_id
)
WHERE EXISTS (SELECT 1 FROM latest_deliveriesWHERE inventory.product_id = latest_deliveries.product_id
);

注意事项

  1. 在执行更新前,先用 SELECT 验证你的 JOIN 条件是否正确

  2. 大量数据更新时考虑添加事务和分批处理

  3. 不同数据库系统的语法可能有差异

  4. 更新操作通常不可逆,建议先备份数据

相关文章:

  • vue2练习项目 家乡特色网站—前端静态网站模板
  • (7)NodeJS的使用与NPM包管理器
  • OpenCV基础函数学习4
  • 快手砍掉本地生活的门槛
  • 【ZYNQ MP开发】Linux下使用bootgen命令生成BOOT.bin报错架构不对问题探究
  • 科学养生指南:解锁健康生活新方式
  • 3200温控板电路解析
  • XMC4800 芯片深度解读:架构、特性、应用与开发指南
  • WebRTC通信技术EasyRTC音视频实时通话安全巡检搭建低延迟、高可靠的智能巡检新体系
  • 视频生成上下文并行方案
  • SQL 中 ROLLUP 的使用方法
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(三)
  • vue3 主题模式 结合 element-plus的主题
  • 《数据结构之美--双向链表》
  • Spring_MVC 高级特性详解与实战应用
  • Debian GNU/Linux的新手入门介绍
  • 【Spring】深入解析 Spring AOP 核心概念:切点、连接点、通知、切面、通知类型和使用 @PointCut 定义切点的方法
  • 安装Github软件详细流程,win10系统从配置git到安装软件详解,以及github软件整合包制作方法(
  • BUUCTF PWN刷题笔记(1-9)
  • LangChain与图数据库Neo4j LLMGraphTransformer融合:医疗辅助诊断、金融风控领域垂直领域、法律咨询场景问答系统的技术实践
  • 江南大部、江淮南部等地今起有较强降雨,水利部部署防范工作
  • 关注“老旧小区加装电梯”等安全隐患,最高检发布相关典型案例
  • “85后”雷海军已任新疆维吾尔自治区统计局局长
  • 吉林省文联党组书记、主席赵明接受纪律审查和监察调查
  • 中签不易,住宿更难,马拉松赛事期间酒店涨价难题如何解决?
  • 乌克兰和美国签署关于矿产协议的备忘录