如何有效地从与表B连接的表A中删除,并且表A具有删除后触发器?

时间:2019-05-10 19:49:35

标签: mysql sql

我有一个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触发器来删除所有不再与联接相关联的类别是否有效?这样最终不会调用上述删除触发器吗?

谢谢您的指导。

0 个答案:

没有答案