有条件 SQL 根据计数加入和删除
Conditional SQL Join based on Count, and Delete
我试图在 table 'wpi9_pc_products' 中找到所有在 table '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
但是,我被困在这里试图找出根据计数有条件地加入两个 table 的正确方法。
我的 SQL 非常非常生锈,如有任何帮助,我们将不胜感激!
如果我没看错,您在产品和关系 table 之间有 parent/child 关系。我建议在子 table 上设置外键约束,它引用父 table,如下所示:
alter table wpi9_term_relationships
add constraint fk_product_id
foreign key (object_id)
references wpi9_pc_products(id_product)
on delete cascade;
然后,您可以简单地从父级删除记录table; 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
我试图在 table 'wpi9_pc_products' 中找到所有在 table '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
但是,我被困在这里试图找出根据计数有条件地加入两个 table 的正确方法。
我的 SQL 非常非常生锈,如有任何帮助,我们将不胜感激!
如果我没看错,您在产品和关系 table 之间有 parent/child 关系。我建议在子 table 上设置外键约束,它引用父 table,如下所示:
alter table wpi9_term_relationships
add constraint fk_product_id
foreign key (object_id)
references wpi9_pc_products(id_product)
on delete cascade;
然后,您可以简单地从父级删除记录table; 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