UPDATE
功能描述
UPDATE语句用于向表中更新一行或多行数据。
本文档只介绍UPDATE语句兼容SQL Server的特性,原Vastbase的UPDATE语法未做删除和修改,详见UPDATE。
Vastbase在SQL Server兼容模式下,支持UPDATE的各类关联操作语法,包括FROM中的JOIN功能:内部连接(INNER JOIN)、左外部连接(LEFT [OUTER] JOIN)、右外部连接(RIGHT [OUTER] JOIN)、完全连接(FULL [OUTER] JOIN)。
注意事项
该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。
语法格式
UPDATE FROM first_table <join_type> second_table [ON (join_condition)];
其中join_type包括:
{
INNER JOIN |
LEFT [OUTER] JOIN |
RIGHT [OUTER] JOIN |
FULL [OUTER] JOIN
}
本文档仅列出部分语法,更多UPDATE语法和参数说明请参考UPDATE。
参数说明
first_table
用于指定连接的表名称,应为已存在的表。连接类别由join_type指定。
second_table
用于指定连接的表名称,应为已存在的表。连接类别由join_type指定。
join_condition
定义用于对每一对连接进行求值的谓词。
示例
1、创建测试表 employees 并插入数据。
create database testdb;
\c testdb
CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100),position_level INT);
INSERT INTO employees (name, position_level)VALUES ('John', 1), ('Jane', 2), ('Mike', 3);
2、创建测试表 salaries 并插入数据。
CREATE TABLE salaries (employee_id INT,salary DECIMAL(10, 2));
INSERT INTO salaries (employee_id, salary)VALUES (1, 5000.00), (2, 7000.00), (3, 9000.00);
3、查看更新前的表数据。
select a.*,b.salary FROM employees a left join salaries b on b.employee_id = a.id;
回显结果如下:
id | name | position_level | salary
----+------+----------------+--------
1 | John | 1 | 5000
2 | Jane | 2 | 7000
3 | Mike | 3 | 9000
(3 rows)
4、更新表数据。
UPDATE salaries SET salary = salary * 1.2 FROM employees inner join salaries on salaries.employee_id = employees.id where employees.position_level >= 2;
5、查看更新后的表数据。
select a.*,b.salary FROM employees a left join salaries b on b.employee_id = a.id;
回显结果如下:
id | name | position_level | salary
----+------+----------------+--------
1 | John | 1 | 5000
2 | Jane | 2 | 8400
3 | Mike | 3 | 10800
(3 rows)