MySQL删除不在另一个表中的相关行

时间:2017-09-12 14:20:15

标签: mysql database

我有一个超过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);

我尝试了什么

  • 使用SET @todelete =(select ...):但是它抛出了我的子查询返回多于1条记录的错误。

我这样做是对的吗?还是可以简化?

谢谢!

1 个答案:

答案 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
    );

在这种方法中,您也可以从其他表中删除数据。

请参阅Delete with join in MySQL