gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:37:23 27 4
gpt4 key购买 nike

我有一个包含 100 多个用户的表,但从未完成登录过程。我正在尝试删除这些用户以及与其关联的所有数据。

由于之前的开发人员没有添加表关系,因此我必须手动执行所有查询。

我现在想出了以下内容

The last of the 3 queries tries to delete all companies which don't have a company_id in the users table, so all companies that don't have a user associated with them.

位置标签约束开始生效,所以我必须先删除它们。这就是我构建这个查询的方式。但是它有很多代码并且很难阅读。有什么办法可以改善这个问题吗?

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\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
);
<小时/>

现在,您可以使用上述辅助查询从与孤独公司关联的 location 表中删除数据。

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;

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

参见Delete with join in MySQL

关于MySQL删除不在另一个表中的相关行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com