在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感谢您的评论,但它不应该是好的。下面的答案对我来说非常有效。再次感谢您的接受。谢谢你的回答。它工作得很好。看起来上面的查询会删除类别表中的每一行,除了其他表中不存在的行。