如何连接表以查找不存在的项目

时间:2014-12-08 19:50:59

标签: php mysql sql

我的问题可能看起来很奇怪。但我有一个问题,为了以下目的,我应该如何在桌面上进行连接:

我有一张名为categories的表。

我有另一个名为categories_products

的数据透视表

我经常左边加入以获取一种产品的类别。

现在,几个月后,从categories表中删除了一些类别。我当时忘了触发(删除已删除猫的所有相关categories_products记录)。我想删除categories_products中删除其类别项目(不存在)的任何记录(现在被认为是未使用的)。我应该写什么查询?我什么都没想到。感谢

3 个答案:

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