【问题标题】:Conditional SQL Join based on Count, and Delete基于计数和删除的条件 SQL 连接
【发布时间】:2021-02-20 21:51:20
【问题描述】:

我正在尝试在表“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 非常非常生疏,因此我们将不胜感激!

【问题讨论】:

    标签: mysql sql count inner-join sql-delete


    【解决方案1】:

    如果我的理解正确,您的产品和关系表之间存在父/子关系。我建议在子表上设置一个外键约束,它引用父表,如下所示:

    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
    

    【讨论】:

    • 感谢您的建议。初始查询不应该说引用 wpi9_pc_products(id_product)
    • @FarhadD:确实。既然您修正了问题中的错字,列名是什么就更清楚了。
    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2022-10-15
    • 2019-03-22
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多