MySQL删除不在其他表中的相关行
我有一个超过100个用户的表格,他们从未完成登录过程。我正在尝试删除这些用户以及与他们相关的所有数据 由于表关系不是由之前从事此工作的开发人员添加的,因此我必须手动执行所有查询 我现在就想到了以下几点 这3个查询中的最后一个将尝试删除用户表中没有公司id的所有公司,以便删除没有与之关联的用户的所有公司 位置和标记约束开始生效,所以我必须先删除它们。我就是这样建立这个查询的。。但是它有很多代码,而且很难阅读。有什么办法可以改进吗MySQL删除不在其他表中的相关行,mysql,database,Mysql,Database,我有一个超过100个用户的表格,他们从未完成登录过程。我正在尝试删除这些用户以及与他们相关的所有数据 由于表关系不是由之前从事此工作的开发人员添加的,因此我必须手动执行所有查询 我现在就想到了以下几点 这3个查询中的最后一个将尝试删除用户表中没有公司id的所有公司,以便删除没有与之关联的用户的所有公司 位置和标记约束开始生效,所以我必须先删除它们。我就是这样建立这个查询的。。但是它有很多代码,而且很难阅读。有什么办法可以改进吗 delete from locations where compan
delete from locations where company_id in (select id from companies
where not exists (select null from users where users.company_id =
companies.id));
delete from tags where company_id in (select id from companies where
not exists (select null from users where users.company_id =
companies.id));
delete from companies where not exists (select null from users where
users.company_id = companies.id);
我试过的
使用SET@todelete=select…:但我的子查询返回的记录超过1条,这会引发错误。
我这样做对吗?还是可以简化
谢谢大家! 你的方法和我的方法没有太大区别。请考虑这只是试图使解决方案可读
由于您试图从location\tags\Companys表中删除具有lonely company\u id的数据,因此首先需要找出哪些公司是lonely。lonely company的定义是——在这种情况下,没有任何用户支持的公司被称为lonely
以下查询提供了这些公司的id:
SELECT
C.company_id
FROM companies C
WHERE NOT EXISTS(
SELECT
1
FROM users U
WHERE U.company_id = C.company_id
);
现在,您可以使用上述帮助器查询从与孤独公司关联的位置表中删除数据
DELETE
L
FROM locations L
INNER JOIN (
SELECT
C.company_id
FROM companies C
WHERE NOT EXISTS(
SELECT
1
FROM users U
WHERE U.company_id = C.company_id
)
) AS helper
ON L.company_id = helper.company_id;
在这种方法中,您也可以从其他表中删除数据
请参见请显示表格结构和一些示例数据。我无法从这些查询中看出您正在尝试做什么。