APP下载

SQLite 3.33新增支援UPDATE FROM指令

消息来源:baojiabao.com 作者: 发布时间:2026-09-06

报价宝综合消息SQLite 3.33新增支援UPDATE FROM指令

SQLite扩展UPDATE叙述句功能,从8月14日释出的SQLite 3.33开始支援UPDATE-FROM子句,也就是说,现在表格更新叙述可以由数据库中的其他表格驱动,开发者可以结合目标资料表和其他资料表,以计算出需要更新的资料列以及值。官方提到,不少数据库引擎都有支援UPDATE-FROM,但是因为SQLite力求与PostgreSQL相容,因此实际上UPDATE-FROM的运作方式,与SQL Server和MySQL有所不同。

当更新资料来自于其他表格的使用案例,UPDATE-FROM便可派上用场,像是可用在销售点应用程序,销售点应用程序会在销售表格中累计销售量,当每日营业结束要结算时,应用程序便会根据每日销售调整库存,因此开发者现在就能够使用UPDATE-FROM子句,在库存资料表中执行UPDATE,而库存的更资料来自于当日的销售数量。

写作:
UPDATE inventory
   SET quantity = quantity - daily.amt
   FROM (SELECT sum(quantity) AS amt, itemId FROM sales GROUP BY 2) AS daily
   WHERE inventory.itemId = daily.itemId;
 
FROM子句查询会计算每个itemId应该减少的库存量,该子句是以库存表格和每一个受影响的库存数量进行连接(Join),目的是要正确地调整库存,官方提到,更新目标表格不被包含在FROM子句中,当要对目标表格进行自连接(Self-Join),则FROM子句中的表格必须要使用不同于目标表格名称的别名。

而当目标表格和FROM子句之间的连接,对相同目标表格列输出多资料列,那么这些多输出列仅会有一列被用来更新目标资料表,官方提到,输出列的选择是随机的,可能根据SQLite版本不同而不同,甚至可能每次执行都不同。

官方也解析了SQLite的UPDATE-FROM功能与其他数据库引擎不同之处,除了SQLite,SQL Server和MySQL也都有支援UPDATE-FROM的概念。在SQL Server中,目标表格被包含在FROM子句中,目标表格会在叙述句中被命名两次;而MySQL的UPDATE-FROM不像其他系统仅只有一个目标表格,因此可以在SET子句修改连接任何表格,并且还可以一次更新多个表格。

2020-08-17 23:48:00

相关文章