我的查询有问题。我有2张关系表。
table category
CategoryId name
1 category1
2 category2
table order
orderId CategoryId date Description
1 2 2014-10-10 okay
2 1 2014-10-10 okay2
3 1 2014-10-10 okay3
我的问题是如果其中一个类别已删除,如何设置categoryname。
答案 0 :(得分:0)
这里最重要的问题是关于业务逻辑。没有类别的订单是否有意义?如果是,那么您可以在删除类别时将categoryId
设置为null
表中的orders
。您可以使用触发器。
然而,更好的解决方案是在您的类别中添加enabled
列,而不是删除某个类别,只需将其enabled
设置为false
- 这使其无法进行进一步选择但保留以前的信息/关系。当然,这需要在选择要显示的类别的位置进行少量更改,即向查询添加where enabled=true
。
如果您在订单中将类别和设置类别ID设置为null,那么您要查找的语法是
DELIMITER //
CREATE TRIGGER category_before_delete
BEFORE DELETE ON category FOR EACH ROW
BEGIN
UPDATE `order` SET categoryid=null WHERE categoryid=OLD.categoryid;
END; //
DELIMITER ;