📜  基于与其他表的比较删除某些行的 SQL 查询(1)

📅  最后修改于: 2023-12-03 15:08:07.650000             🧑  作者: Mango

基于与其他表的比较删除某些行的 SQL 查询

在 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 包含了 idnameage 三个列,数据表 B 包含了 idage_limit 两个列。这两个数据表中 id 列的值是对应的,因此我们可以使用它们之间的关联条件来决定哪些数据行需要删除。

基本用法

下面是一个基于 AB 两个数据表的关联条件来删除数据表 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
);