九月 6, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的DELETE
语句来模拟连接删除操作。
目录
带有 USING 子句的 DELETE 语句简介
PostgreSQL 不支持DELETE JOIN
语句。但是,它确实支持DELETE
语句中的USING
子句,该子句提供与DELETE JOIN
类似的功能。
下面显示了带有USING
子句的DELETE
语句的语法:
DELETE FROM table_name1
USING table_expression
WHERE condition
RETURNING returning_columns;
在这个语法中:
- 首先,在
USING
关键字后指定表表达式。它可以是一张或多张表。 - 然后,在
WHERE
子句中使用USING
子句中出现的表中的列来连接数据。
例如,以下语句使用带有USING
子句的DELETE
语句,从t1
删除与t2
相同 ID 的数据:
DELETE FROM t1
USING t2
WHERE t1.id = t2.id
让我们看一个例子。
首先,使用以下语句创建两个表:contacts
和blacklist
:
DROP TABLE IF EXISTS contacts;
CREATE TABLE contacts(
contact_id serial PRIMARY KEY,
first_name varchar(50) NOT NULL,
last_name varchar(50) NOT NULL,
phone varchar(15) NOT NULL
);
DROP TABLE IF EXISTS blacklist;
CREATE TABLE blacklist(
phone varchar(15) PRIMARY KEY
);
INSERT INTO contacts(first_name, last_name, phone)
VALUES ('John','Doe','(408)-523-9874'),
('Jane','Doe','(408)-511-9876'),
('Lily','Bush','(408)-124-9221');
INSERT INTO blacklist(phone)
VALUES ('(408)-523-9874'),
('(408)-511-9876');
其次,从contacts
表删除在blacklist
表中存在电话号码的联系人:
DELETE FROM contacts
USING blacklist
WHERE contacts.phone = blacklist.phone;
输出:
DELETE 2
第三步,从contacts
表中查询数据:
SELECT * FROM contacts;
使用子查询进行连接删除
USING
子句不是 SQL 标准的一部分。这意味着USING
子句可能在其他数据库系统中不可用。
如果您计划使您的应用程序与其他数据库产品兼容,则不应在DELETE
语句中使用USING
子句。相反,您可以使用子查询。
以下语句使用DELETE
语句,删除电话号码出现在blacklist
表中的所有联系人:
DELETE FROM contacts
WHERE phone IN (SELECT phone FROM blacklist);
在此示例中,子查询返回blacklist
表中的电话列表,DELETE
语句删除电话与子查询返回的电话匹配的联系人。
概括
- 在
DELETE
语句或子查询中使用USING
子句来模拟DELETE JOIN
操作。