UPDATE
更新时间:2025-10-16
描述
该语句是为进行对数据进行更新的操作,UPDATE 语句目前仅支持 UNIQUE KEY 模型。
UPDATE 操作目前只支持更新 Value 列。
语法
SQL
1[cte]
2UPDATE target_table [table_alias]
3 SET assignment_list
4 [ FROM additional_tables]
5 WHERE condition
Required Parameters
- target_table: 待更新数据的目标表。可以是 'db_name.table_name' 形式
- assignment_list: 待更新的目标列,形如 'col_name = value, col_name = value' 格式
- WHERE condition: 期望更新的条件,一个返回 true 或者 false 的表达式即可
Optional Parameters
- cte: 通用表达式。可以是 'WITH a AS SELECT * FROM tbl' 形式
- table_alias: 表的别名
- FROM additional_tables: 指定一个或多个表,用于选中更新的行,或者获取更新的值。注意,如需要在此列表中再次使用目标表,需要为其显式指定别名。
Note
当前 UPDATE 语句仅支持在 UNIQUE KEY 模型上的行更新。
示例
test 表是一个 unique 模型的表,包含:k1, k2, v1, v2 四个列。其中 k1, k2 是 key,v1, v2 是 value,聚合方式是 Replace。
- 将 'test' 表中满足条件 k1 =1 , k2 =2 的 v1 列更新为 1
SQL
1UPDATE test SET v1 = 1 WHERE k1=1 and k2=2;
- 将 'test' 表中 k1=1 的列的 v1 列自增 1
SQL
1UPDATE test SET v1 = v1+1 WHERE k1=1;
- 使用
t2和t3表连接的结果,更新t1
SQL
1-- 创建 t1, t2, t3 三张表
2CREATE TABLE t1
3 (id INT, c1 BIGINT, c2 STRING, c3 DOUBLE, c4 DATE)
4UNIQUE KEY (id)
5DISTRIBUTED BY HASH (id)
6PROPERTIES('replication_num'='1', "function_column.sequence_col" = "c4");
7
8CREATE TABLE t2
9 (id INT, c1 BIGINT, c2 STRING, c3 DOUBLE, c4 DATE)
10DISTRIBUTED BY HASH (id)
11PROPERTIES('replication_num'='1');
12
13CREATE TABLE t3
14 (id INT)
15DISTRIBUTED BY HASH (id)
16PROPERTIES('replication_num'='1');
17
18-- 插入数据
19INSERT INTO t1 VALUES
20 (1, 1, '1', 1.0, '2000-01-01'),
21 (2, 2, '2', 2.0, '2000-01-02'),
22 (3, 3, '3', 3.0, '2000-01-03');
23
24INSERT INTO t2 VALUES
25 (1, 10, '10', 10.0, '2000-01-10'),
26 (2, 20, '20', 20.0, '2000-01-20'),
27 (3, 30, '30', 30.0, '2000-01-30'),
28 (4, 4, '4', 4.0, '2000-01-04'),
29 (5, 5, '5', 5.0, '2000-01-05');
30
31INSERT INTO t3 VALUES
32 (1),
33 (4),
34 (5);
35
36-- 更新 t1
37UPDATE t1
38 SET t1.c1 = t2.c1, t1.c3 = t2.c3 * 100
39 FROM t2 INNER JOIN t3 ON t2.id = t3.id
40 WHERE t1.id = t2.id;
预期结果为,更新了t1表id为1的列
Plain Text
1+----+----+----+--------+------------+
2| id | c1 | c2 | c3 | c4 |
3+----+----+----+--------+------------+
4| 1 | 10 | 1 | 1000.0 | 2000-01-01 |
5| 2 | 2 | 2 | 2.0 | 2000-01-02 |
6| 3 | 3 | 3 | 3.0 | 2000-01-03 |
7+----+----+----+--------+------------+
- 使用 cte 更新表
SQL
1create table orders(
2 o_orderkey bigint,
3 o_totalprice decimal(15, 2)
4) unique key(o_orderkey)
5distributed by hash(o_orderkey) buckets 1
6properties (
7 "replication_num" = "1"
8);
9
10insert into orders values
11(1, 34.1),
12(2, 432.8);
13
14create table lineitem(
15 l_linenumber int,
16 o_orderkey bigint,
17 l_discount decimal(15, 2)
18) unique key(l_linenumber)
19distributed by hash(l_linenumber) buckets 1
20properties (
21 "replication_num" = "1"
22);
23
24insert into lineitem values
25(1, 1, 1.23),
26(2, 1, 3.21),
27(3, 2, 18.08),
28(4, 2, 23.48);
29
30with discount_orders as (
31 select * from orders
32 where o_totalprice > 100
33)
34update lineitem set l_discount = l_discount*0.9
35from discount_orders
36where lineitem.o_orderkey = discount_orders.o_orderkey;
关键词
Plain Text
1UPDATE
