📜  mysql delete if not in another table - SQL (1)

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

MySQL - 删除不在另一张表中的行

在MySQL中,我们经常需要删除某张表中不满足条件的行。但有时候,我们需要删除的是不在另一张表中的行。这时候,我们可以使用子查询和NOT EXISTS的组合,来实现删除不在另一张表中的行。

示例

我们有两个表:users和blacklist。我们想要删除在users中但不在blacklist中的用户:

DELETE FROM users
WHERE NOT EXISTS (
    SELECT *
    FROM blacklist
    WHERE blacklist.user_id = users.id
);

上述SQL语句的含义是,从users表中删除所有不在blacklist表中的行。NOT EXISTS子句用来限定只保留在blacklist表中不存在的行。

解释
  • DELETE FROM:表示要删除哪张表的数据
  • WHERE NOT EXISTS:NOT EXISTS是一个谓词子句,该子句与WHERE一起使用,用于删除不在黑名单中的用户。
  • SELECT:用于从blacklist表中检索数据
  • blacklist.user_id = users.id:JOIN条件,用于连接两个表并检索符合条件的数据
结论

使用子查询和NOT EXISTS组合可以轻松删除不在另一张表中的行。此外,该方法还非常灵活,您可以针对不同的情况进行修改和扩展。