在MySql中使用内部联接删除3个表的记录约束

在MySql中使用内部联接删除3个表的记录约束,mysql,constraints,inner-join,Mysql,Constraints,Inner Join,我正在寻找加入查询。实际上我有三张主桌 - Category [cat_id(PK), cat_name] - Product [pro_id(PK), cat_id(FK),pro_name] - Company [com_id(PK), cat_id(FK),pro_id(FK),...] 现在我在列表视图中有了类别列表。因此,当用户单击“删除”时,所选类别应被删除 现在,我可以检查单个表,其他两个表是否使用相同的cat\u id if(check cat_id is used in

我正在寻找加入查询。实际上我有三张主桌

- Category [cat_id(PK), cat_name]
- Product  [pro_id(PK), cat_id(FK),pro_name]
- Company  [com_id(PK), cat_id(FK),pro_id(FK),...]
现在我在列表视图中有了类别列表。因此,当用户单击“删除”时,所选类别应被删除

现在,我可以检查单个表,其他两个表是否使用相同的
cat\u id

if(check cat_id is used in other tables or not)  
{
alert("you can't delete because category is used by some other table(s).");
}
else
{
alert("record deleted.");
}
现在我可以使用
NOT IN
从单个表中检查相同的内容

DELETE FROM CATEGORY WHERE cat_id NOT IN (SELECT DISTINCT cat_id FROM PRODUCT);
这将仅在产品表中不可用时删除选定的cat_id

甚至我也尝试了
joinquery
,如下所示

SELECT CATEGORY.cat_id FROM CATEGORY INNER JOIN PRODUCT ON CATEGORY.cat_id =  PRODUCT.cat_id;
但我不知道如何使用第三个表。所以,我想知道如何检查多个表


请帮助解决此查询

如果要在一个查询中执行删除和检查,可以使用

DELETE FROM CATEGORY WHERE cat_id NOT IN 
(SELECT DISTINCT cat_id FROM PRODUCT) AND cat_id NOT IN
(SELECT DISTINCT cat_id FROM COMPANY)
DELETE
FROM category
WHERE category.cat_id = ? 
    AND (SELECT COUNT(*) FROM product WHERE cat_id = ?) = 0 
    AND (SELECT COUNT(*) FROM company WHERE cat_id = ?) = 0
如果您只想检查是否有与该键匹配的行,可以运行

SELECT (SELECT COUNT(*) FROM product WHERE cat_id = ?) 
    AND (SELECT COUNT(*) FROM company WHERE cat_id = ?) AS matching_rows

使用
join
条件如何
CASCADE DELETE
您尝试过吗?如果您已经设置了引用完整性,您只需尝试一下即可。DBMS将阻止您删除使用的行。在这种情况下,您希望在所有条件下都放弃它,请尝试像dianuj提到的那样级联@dianuj是这样的吗比如,如果我有cat_id=5,并且它被pro_id=2使用,那么它将删除pro_id=2以及cat_id=5。是这样吗?@dianuj感谢您的评论,但它不应该是好的。下面的答案对我来说非常有效。再次感谢您的接受。谢谢你的回答。它工作得很好。看起来上面的查询会删除类别表中的每一行,除了其他表中不存在的行。