Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL删除不在其他表中的相关行_Mysql_Database - Fatal编程技术网

MySQL删除不在其他表中的相关行

MySQL删除不在其他表中的相关行,mysql,database,Mysql,Database,我有一个超过100个用户的表格,他们从未完成登录过程。我正在尝试删除这些用户以及与他们相关的所有数据 由于表关系不是由之前从事此工作的开发人员添加的,因此我必须手动执行所有查询 我现在就想到了以下几点 这3个查询中的最后一个将尝试删除用户表中没有公司id的所有公司,以便删除没有与之关联的用户的所有公司 位置和标记约束开始生效,所以我必须先删除它们。我就是这样建立这个查询的。。但是它有很多代码,而且很难阅读。有什么办法可以改进吗 delete from locations where compan

我有一个超过100个用户的表格,他们从未完成登录过程。我正在尝试删除这些用户以及与他们相关的所有数据

由于表关系不是由之前从事此工作的开发人员添加的,因此我必须手动执行所有查询

我现在就想到了以下几点

这3个查询中的最后一个将尝试删除用户表中没有公司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条,这会引发错误。 我这样做对吗?还是可以简化

谢谢大家!

你的方法和我的方法没有太大区别。请考虑这只是试图使解决方案可读

由于您试图从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;
在这种方法中,您也可以从其他表中删除数据


请参见

请显示表格结构和一些示例数据。我无法从这些查询中看出您正在尝试做什么。