我有一个超过100个用户的表,从未完成登录过程。我正在尝试删除这些用户以及与之关联的所有数据。
由于之前的开发人员没有添加表关系,因此我必须手动执行所有查询。
我现在想出了以下内容
3个查询中的最后一个尝试删除所有在users表中没有company_id的公司,因此所有公司都没有与之关联的用户。
位置和标记约束启动,所以我必须先删除它们。这就是我构建这个查询的方式..但它是很多代码而且很难阅读。有什么方法可以改善这个吗?
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);
我这样做是对的吗?还是可以简化?
谢谢!
答案 0 :(得分:1)
你的方法与我的方法差别不大。请考虑这只是尝试使解决方案可读
由于您尝试从select top 10 id, a, b, c, d="table2 rows" into ##temp1 from DataTable1 where b=5;
select top 6 id, a,b,c,d="table3 rows" into ##temp2 from DataTable1 where b=5 and id not in (select id from ##temp1);
select top 2 id, a,b,c,d="table4 rows" into ##temp3 from DataTable1 where b=2 and id not in (select id from ##temp1) and id not in (select id from ##temp2);
\ location
\ {{{}}个表格中删除那些孤独tags
的数据,首先您需要找出哪些公司是孤独的。孤独公司的定义是 - 在这种情况下,一个没有任何依赖任何用户的公司被认为是孤独的。
以下查询提供了那些孤独公司的companies
:
company_id
现在,您可以使用上述帮助程序查询删除与孤独公司关联的id
表中的数据。
SELECT
C.company_id
FROM companies C
WHERE NOT EXISTS(
SELECT
1
FROM users U
WHERE U.company_id = C.company_id
);
在这种方法中,您也可以从其他表中删除数据。