DELETE
功能描述
DELETE语句用于从指定的表里删除满足 WHERE 子句的行。如果 WHERE 子句不存在,将删除表中所有行,结果只保留表结构。
Vastbase在SQL Server兼容模式下,支持DELETE的各类关联操作语法,包括FROM中的JOIN功能:内部连接(INNER JOIN)、左外部连接(LEFT [OUTER] JOIN)、右外部连接(RIGHT [OUTER] JOIN)、完全连接(FULL [OUTER] JOIN)。
本文档只介绍DELETE语句兼容SQL Server的特性,原Vastbase的DELETE语法未做删除和修改,详见DELETE。
注意事项
该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。
语法格式
DELETE FROM first_table <join_type> second_table [ON (join_condition)];
其中join_type包括:
{
INNER JOIN |
LEFT [OUTER] JOIN |
RIGHT [OUTER] JOIN |
FULL [OUTER] JOIN
}
本文档仅列出部分语法,更多DELETE语法和参数说明请参考DELETE。
参数说明
first_table
用于指定连接的表名称,应为已存在的表。连接类别由join_type指定。
second_table
用于指定连接的表名称,应为已存在的表。连接类别由join_type指定。
join_condition
定义用于对每一对连接进行求值的谓词。
示例
1、创建测试表 employees 和 salaries 并插入数据。
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);
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);
2、查询删除前的表数据。
select a.*,b.salary FROM salaries b inner join employees a on b.employee_id = a.id order by id;
返回结果如下:
id | name | position_level | salary
----+------+----------------+--------
1 | John | 1 | 5000
2 | Jane | 2 | 7000
3 | Mike | 3 | 9000
(3 rows)
3、删除测试表 salaries ,并查询表数据。
begin;
delete salaries FROM salaries inner join employees on salaries.employee_id = employees.id where employees.position_level >= 2;
select a.*,b.salary FROM salaries b inner join employees a on b.employee_id = a.id order by id;
rollback;
回显结果如下:
id | name | position_level | salary
----+------+----------------+--------
1 | John | 1 | 5000
(1 row)