我有一个products
表,一个category
表和一个联接两个表的联接表,名为prod_cat_join
。我试图定期删除与具有特定团队ID的产品不相关的所有类别。众所周知,category
具有一个触发器,该触发器会在删除类别后删除与prod_cat_join
关联的category
中的所有联接。是否可以调用一个SQL查询来删除所有不与产品相关联且与特定团队ID相关联的所有类别,而不会遇到功能/触发错误?
触发器如下:
CREATE DEFINER=`dbe1`@`%` TRIGGER `db`.`category_AFTER_DELETE` AFTER DELETE ON `category` FOR EACH ROW
BEGIN
delete from prod_cat_join where prod_cat_join.categoryID = ID;
END
我被周期性调用以删除所有与产品无关的类别的查询是:
DELETE db.category FROM db.category
LEFT JOIN db.prod_cat_join AS join_cat
ON join_cat.categoryID = db.category.ID
WHERE join_cat.productID IS NULL AND db.category.teamID = '1234'
我知道可以查询与产品不相关的所有类别,然后删除返回的一组非相关类别。但这似乎效率很低,因为它需要两个查询。根据我们当前的设置,是否可以绕过触发器来运行上述查询?还是有其他一些单一查询方法来删除未关联的类别?并且在prod_cat_join
中放置一个after after delete触发器来删除所有不再与联接相关联的类别是否有效?这样最终不会调用上述删除触发器吗?
谢谢您的指导。