使用子查询来更新多列值

该表达式列表可包括一个或多个子查询。每一必须返回包含一个或多个值的单个行。SET 子句显式地或隐式地指定的列的数目必须等于在多列 SET 子句中等号(=)之后的表达式(或表达式列表)所返回的值的数目。

必须将子查询括在圆括号之间。这些圆括号嵌套在紧跟在等号(=)之后的圆括号之内。如果表达式列表包括多个子查询,则必须将每一子查询括在圆括号之间,以逗号(,)分隔连续的子查询:
UPDATE ... SET ... = ((subqueryA),(subqueryB), ... (subqueryN))
下列示例展示 SET 子句中子查询的使用:
UPDATE items
          SET (stock_num, manu_code, quantity) = 
          ( (SELECT stock_num, manu_code FROM stock 
          WHERE description = 'baseball'), 2)
          WHERE item_num = 1 AND order_num = 1001;
          
          UPDATE table1
          SET (col1, col2, col3) =
          ((SELECT MIN (ship_charge), MAX (ship_charge) FROM orders), '07/01/2007')
          WHERE col4 = 1001; 

如果您正在更新表层级中的超级表,则 SET 子句不可包括引用它的子表之一的子查询。如果您正在更新表层级中的子表,则 SET 子句中的子查询可引用超级表,如果它仅引用超级表的话。也就是说,子查询必须使用 SELECT… FROM ONLY (supertable) 语法。