【发布时间】:2013-09-20 09:57:12
【问题描述】:
我正在寻找连接查询。其实我有主要的三个表。
- 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_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 INlike 从单个表中检查相同的内容,
DELETE FROM CATEGORY WHERE cat_id NOT IN (SELECT DISTINCT cat_id FROM PRODUCT);
这只会删除选定的 cat_id,如果它在 PRODUCT 表中不可用。
即使我尝试过JOIN QUERY也如下,
SELECT CATEGORY.cat_id FROM CATEGORY INNER JOIN PRODUCT ON CATEGORY.cat_id = PRODUCT.cat_id;
但我不知道如何使用第三张表。所以,我想知道如何检查多个表。
请帮助解决这个问题。
【问题讨论】:
-
带有
join条件 -
CASCADE DELETE你试过了吗? -
如果您设置了参照完整性,您可以简单地尝试。 DBMS 将阻止您删除已使用的行。如果您想在所有条件下放弃它,请尝试 dianuj 提到的 CASCADE。
-
stackoverflow.com/questions/2914936/… @dianuj 是这样的吗? & 就像我有 cat_id=5 并且它被 pro_id=2 使用那么它将删除 pro_id=2 以及 cat_id=5 是这样吗?
-
@dianuj 感谢您的 cmets,但它不应该没问题。下面的答案对我来说非常有用。再次感谢
标签: mysql constraints inner-join