迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中使用 Join 删除

作者:迹忆客 最近更新:2024/03/25 浏览次数:

本教程文章将向你展示如何使用 MySQL JOIN 方法删除多个表中的数据。当你同时删除一个表中与另一个表中的特定记录相关的记录时,这很有用。


在 MySQL 中使用 DELETE FROM 语句的限制

DELETE FROM 语句用于删除表中的行。你可以应用 WHERE 来指定删除时要满足的行和条件。

以下代码包含两个表,第一个记录供应商商品及其位置,第二个记录销售这些商品的店主列表:

Create Table supplier (
    suppId INTEGER PRIMARY KEY,
    category TEXT NOT NULL,
    location TEXT NOT NULL
);
Create Table shops (
    owner TEXT NOT NULL,
    shptype TEXT NOT NULL,
    area TEXT NOT NULL
);

INSERT INTO supplier VALUES (0001, 'Veggies', 'Downtown');
INSERT INTO supplier VALUES (0002, 'Fruits', 'Downtown');
INSERT INTO supplier VALUES (0003, 'Dairy', 'Downtown');
INSERT INTO supplier VALUES (0004, 'Veggies', 'Uptown');
INSERT INTO supplier VALUES (0005, 'Fruits', 'Uptown');
INSERT INTO supplier VALUES (0006, 'Dairy', 'Uptown');

INSERT INTO shops VALUES ('Mark', 'Veggies', 'Downtown');
INSERT INTO shops VALUES ('Mark', 'Fruits', 'Downtown');
INSERT INTO shops VALUES ('Susan', 'Dairy', 'Downtown');

表中的所有商店都位于市中心,因此在这种情况下,维护 Uptown 地区的供应商记录是没有意义的。

使用 DELETE 一次只能用于一张表。你可以从 shops 表中获取数据,指定条件,然后删除 supplier 表中与所有条件匹配的所有记录。

在这种情况下,我们将使用 JOINsupplier 表中删除 Uptown 的所有记录。


在 MySQL 中使用 INNER JOIN 方法

使用 INNER JOIN 方法将允许你合并两个或多个表并一次删除多行。

还有其他选择,例如使用子查询,但这是完成工作的更实用的方法。使用上面的示例表,你可以删除两个表中具有 Uptown 值的所有行。

以下代码将查找商店的位置并将供应商保留在 Downtown 区域,同时删除注册为 Uptown 的供应商:

DELETE supplier FROM supplier
INNER JOIN shops ON supplier.category = shops.shptype
WHERE supplier.location != shops.location;

表的连接基于共享相似数据的字段。类别字段显示了在这种情况下供应商提供了什么以及销售了哪些商店。

合并这两个表将允许你只定义一个删除条件。在这种情况下,供应商的位置将决定要删除的行。

你也可以通过在 DELETE 后添加表名来同时删除两个表。如果你在多个表中有多个记录,这将起作用。

DELETE supplier, shops FROM supplier
...

使用 JOIN 删除 MySQL 的最终结果

结果将使你的表格保持完整,同时删除不符合上述标准的供应商的所有记录。

Create Table supplier (
    suppId INTEGER PRIMARY KEY,
    category TEXT NOT NULL,
    location TEXT NOT NULL
);
Create Table shops (
    owner TEXT NOT NULL,
    shptype TEXT NOT NULL,
    location TEXT NOT NULL
);

INSERT INTO supplier VALUES (0001, 'Veggies', 'Downtown');
INSERT INTO supplier VALUES (0002, 'Fruits', 'Downtown');
INSERT INTO supplier VALUES (0003, 'Dairy', 'Downtown');
INSERT INTO supplier VALUES (0004, 'Veggies', 'Uptown');
INSERT INTO supplier VALUES (0005, 'Fruits', 'Uptown');
INSERT INTO supplier VALUES (0006, 'Dairy', 'Uptown');

INSERT INTO shops VALUES ('Mark', 'Veggies', 'Downtown');
INSERT INTO shops VALUES ('Mark', 'Fruits', 'Downtown');
INSERT INTO shops VALUES ('Susan', 'Dairy', 'Downtown');
-- delete function 
DELETE supplier FROM supplier
INNER JOIN shops ON supplier.category = shops.shptype
WHERE supplier.location != shops.location;

上面将所有供应商按位置匹配到商店,在这种情况下为 Downtown,并从供应商表中删除所有与条件不匹配的行。

从下面的 SELECT 试验中,我们可以看到 supplier 表现在只包含列为 Downtown 的供应商:

SELECT * FROM supplier

结果:

上一篇:在 MySQL 中连接 3 个表

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

MySQL 级联删除

发布时间:2024/03/25 浏览次数:114 分类:MySQL

本文介绍 MySQL 中的删除级联

MySQL 中的 rank 函数

发布时间:2024/03/25 浏览次数:156 分类:MySQL

本教程演示了在 MySQL 数据库中使用 rank 函数。

MySQL 函数

发布时间:2024/03/25 浏览次数:74 分类:MySQL

本文介绍如何在 MySQL 中使用和创建一个简单的函数。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便