📅  最后修改于: 2023-12-03 15:03:04.650000             🧑  作者: Mango
在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表中不存在的行。
使用子查询和NOT EXISTS组合可以轻松删除不在另一张表中的行。此外,该方法还非常灵活,您可以针对不同的情况进行修改和扩展。