Php 如何联接表以查找不存在的项

Php 如何联接表以查找不存在的项,php,mysql,sql,Php,Mysql,Sql,我的问题可能看起来很奇怪。但我有一个问题,我应该如何在表上进行连接,以达到以下目的: 我有一张名为categories的表格 我有另一个数据透视表,名为categories\u products 我经常做一个左连接来获得一个产品的类别 现在,几个月后,有一些类别从类别表中删除。当时我忘了触发删除所有相关类别的产品记录。我想删除现在被认为是未使用的任何记录,因为其类别项目被删除的类别产品不存在。我应该写什么疑问?我什么也没想到。谢谢 delete from categories_products

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

我有一张名为categories的表格

我有另一个数据透视表,名为categories\u products

我经常做一个左连接来获得一个产品的类别

现在,几个月后,有一些类别从类别表中删除。当时我忘了触发删除所有相关类别的产品记录。我想删除现在被认为是未使用的任何记录,因为其类别项目被删除的类别产品不存在。我应该写什么疑问?我什么也没想到。谢谢

delete from categories_products cp 
where not exists (select 1 from categories c where c.id = cp.category_id);

但存在的速度通常更快


但是EXISTS通常更快。

这种多表删除应该更快,因为它不需要MySQL通常不擅长的子查询:

DELETE categories_products
 FROM categories_products
 LEFT JOIN categories
 ON categories_products.categories_id = categories.id
 HAVING categories.id IS NULL;

这种多表删除应该更快,因为它不需要MySQL通常不擅长的子查询:

DELETE categories_products
 FROM categories_products
 LEFT JOIN categories
 ON categories_products.categories_id = categories.id
 HAVING categories.id IS NULL;
删除产品类别 其中id不在select c.id表格类别的select*中 加入c类 关于cp.categories_id=c.idx

删除产品类别 其中id不在select c.id表格类别的select*中 加入c类
关于cp.categories_id=c.idx

您的第一个文件中似乎存在语法错误code@Mostafa塔勒比,不客气。是的,DELETE子句中的表别名可能存在一些问题:第一个语句中似乎存在语法错误code@Mostafa塔勒比,不客气。是的,DELETE子句中的表别名可能存在一些问题:MySQL多表删除语法不支持有:MySQL多表删除语法不支持有: