我的问题可能看起来很奇怪。但我有一个问题,为了以下目的,我应该如何在桌面上进行连接:
我有一张名为categories
的表。
我有另一个名为categories_products
我经常左边加入以获取一种产品的类别。
现在,几个月后,从categories
表中删除了一些类别。我当时忘了触发(删除已删除猫的所有相关categories_products
记录)。我想删除categories_products
中删除其类别项目(不存在)的任何记录(现在被认为是未使用的)。我应该写什么查询?我什么都没想到。感谢
答案 0 :(得分:3)
delete from categories_products cp
where not exists (select 1 from categories c where c.id = cp.category_id);
或者
delete from categories_products cp
where cp.category_id not in (select distinct c.id from categories c);
但EXISTS通常更快。
答案 1 :(得分:1)
删除categories_products 其中id不在(select * from(select c.id form categories_products cp。) 加入类别c ON cp.categories_id = c.id)x);
答案 2 :(得分:0)
这个多表删除应该更快,因为它不需要子查询(MySQL通常不擅长):
DELETE categories_products
FROM categories_products
LEFT JOIN categories
ON categories_products.categories_id = categories.id
HAVING categories.id IS NULL;