📅  最后修改于: 2023-12-03 15:08:07.650000             🧑  作者: Mango
在 SQL 数据库中,我们可以使用 DELETE
语句删除数据表中的数据。有时候我们需要根据一个或多个其他数据表的条件,来决定删除哪些数据表中的行。这就是基于与其他表的比较删除某些行的 SQL 查询。
为了说明这个 SQL 查询的使用,我们可以拥有以下两个示例数据表:
-- 示例数据表 A
CREATE TABLE A (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
INSERT INTO A (id, name, age) VALUES
(1, 'John', 25),
(2, 'Jane', 30),
(3, 'Bob', 35);
-- 示例数据表 B
CREATE TABLE B (
id INT PRIMARY KEY,
age_limit INT
);
INSERT INTO B (id, age_limit) VALUES
(1, 26),
(2, 31),
(3, 36);
数据表 A
包含了 id
、name
和 age
三个列,数据表 B
包含了 id
和 age_limit
两个列。这两个数据表中 id
列的值是对应的,因此我们可以使用它们之间的关联条件来决定哪些数据行需要删除。
下面是一个基于 A
和 B
两个数据表的关联条件来删除数据表 A
中的某些行的 SQL 查询示例。
DELETE FROM A
WHERE EXISTS (
SELECT 1
FROM B
WHERE A.id = B.id
AND A.age > B.age_limit
);
上面的 SQL 查询的含义是:如果数据表 A
中某行数据的 age
列的值大于对应的数据表 B
中的 age_limit
列的值,那么就删除这些行。
-- 示例数据表 A
CREATE TABLE A (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
INSERT INTO A (id, name, age) VALUES
(1, 'John', 25),
(2, 'Jane', 30),
(3, 'Bob', 35);
-- 示例数据表 B
CREATE TABLE B (
id INT PRIMARY KEY,
age_limit INT
);
INSERT INTO B (id, age_limit) VALUES
(1, 26),
(2, 31),
(3, 36);
-- 基于与其他表的比较删除某些行的 SQL 查询
DELETE FROM A
WHERE EXISTS (
SELECT 1
FROM B
WHERE A.id = B.id
AND A.age > B.age_limit
);