基于计数和删除的条件SQL连接

问题描述

我正尝试在表'wpi9_pc_products'中查找表'wpi9_term_relationships'中少于3个条目的所有行,以便可以从两个表中删除它们。

在从臀部射击之前,我想确保使用以下查询将正确的行拖出进行删除

SELECT * FROM `wpi9_pc_products` INNER JOIN wpi9_term_relationships ON 
wpi9_pc_products.id_product=wpi9_term_relationships.object_id GROUP BY 
wpi9_term_relationships.object_id HAVING COUNT(*) < 3

但是,我被困在这里,试图根据计数找出有条件地连接两个表的正确方法

我的sql非常生锈,因此任何帮助将不胜感激!

解决方法

如果我正确遵循的话,则您在产品和关系表之间具有父/子关系。我建议在子表上设置一个外键约束,该约束引用父表,如下所示:

alter table wpi9_term_relationships
    add constraint fk_product_id
    foreign key (object_id)
    references wpi9_pc_products(id_product)
    on delete cascade;

然后,您可以简单地从父表中删除记录; on delete cascade子句确保子记录将被自动删除:

delete p
from wpi9_pc_products p
where (select count(*) from wpi9_term_relationships r where r.object_id = p.id_product) < 3